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 <gert.wollny@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26420>
(cherry picked from commit
c13de0509c43f9b9764dc939aa64fe70c6a80870)
"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
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();