From: Gert Wollny Date: Thu, 30 Nov 2023 12:43:11 +0000 (+0100) Subject: r600/sfn: Don't try to re-use iterators when the set is made empty X-Git-Tag: upstream/23.3.3~152 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=530e0c153992599e137844c2285d0de7cc35187c;p=platform%2Fupstream%2Fmesa.git r600/sfn: Don't try to re-use iterators when the set is made empty It seems with libc++ the iterators are invalidated when the set is emptied during iterating over it. Fixes: 05fab97 (r600/sfn: Don't try to re-use the iterator when uses is updated) Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7931 Signed-off-by: Gert Wollny Part-of: (cherry picked from commit c13de0509c43f9b9764dc939aa64fe70c6a80870) --- diff --git a/.pick_status.json b/.pick_status.json index 12fcfdf..6952b34 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -494,7 +494,7 @@ "description": "r600/sfn: Don't try to re-use iterators when the set is made empty", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "05fab97b2ce8ebd8420ded175101a0fa5110172c", "notes": null diff --git a/src/gallium/drivers/r600/sfn/sfn_optimizer.cpp b/src/gallium/drivers/r600/sfn/sfn_optimizer.cpp index c4d0a9f..5038b94 100644 --- a/src/gallium/drivers/r600/sfn/sfn_optimizer.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_optimizer.cpp @@ -375,7 +375,11 @@ CopyPropFwdVisitor::visit(AluInstr *instr) auto mov_block_id = instr->block_id(); - while(ii != ie) { + /** libc++ seems to invalidate the end iterator too if a std::set is + * made empty by an erase operation, + * https://gitlab.freedesktop.org/mesa/mesa/-/issues/7931 + */ + while(ii != ie && !dest->uses().empty()) { auto i = *ii; auto target_block_id = i->block_id();