summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2018-06-29 03:47:26 +0100
committerDave Airlie <airlied@redhat.com>2018-07-04 07:42:22 +0100
commit8c51caab2404c5c9f5211936d27e9fe1c0af2e7d (patch)
tree9b79dca8ee8e62e4574333ba61b2dda801a89ace /src
parent45f9d58668079803abe64d2f104468ee118f78ea (diff)
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>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/r600/sb/sb_if_conversion.cpp11
1 files changed, 4 insertions, 7 deletions
diff --git a/src/gallium/drivers/r600/sb/sb_if_conversion.cpp b/src/gallium/drivers/r600/sb/sb_if_conversion.cpp
index 3f6431b80f5..017153434fc 100644
--- a/src/gallium/drivers/r600/sb/sb_if_conversion.cpp
+++ b/src/gallium/drivers/r600/sb/sb_if_conversion.cpp
@@ -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;
}