r600/sb: cleanup if_conversion iterator to be legal C++

The current code causes:
/usr/include/c++/8/debug/safe_iterator.h:207:
Error: attempt to copy from a singular iterator.

This is due to the iterators getting invalidated, fix the
reverse iterator to use the return value from erase, and
cast it properly.

(used Mathias suggestion)
Cc: <mesa-stable@lists.freedesktop.org>
Reviewed-by: Mathias Fröhlich <mathias.froehlich@web.de>
This commit is contained in:
Dave Airlie 2018-06-29 03:47:26 +01:00
parent 45f9d58668
commit 8c51caab24

View file

@ -42,16 +42,13 @@ int if_conversion::run() {
regions_vec &rv = sh.get_regions();
unsigned converted = 0;
for (regions_vec::reverse_iterator N, I = rv.rbegin(), E = rv.rend();
I != E; I = N) {
N = I; ++N;
for (regions_vec::reverse_iterator I = rv.rbegin(); I != rv.rend(); ) {
region_node *r = *I;
if (run_on(r)) {
rv.erase(I.base() - 1);
I = regions_vec::reverse_iterator(rv.erase((++I).base()));
++converted;
}
} else
++I;
}
return 0;
}