diff options
-rw-r--r-- | libstdc++-v3/ChangeLog | 11 | ||||
-rw-r--r-- | libstdc++-v3/include/debug/unordered_map | 4 | ||||
-rw-r--r-- | libstdc++-v3/include/debug/unordered_set | 4 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/23_containers/unordered_set/debug/89608_neg.cc | 37 |
4 files changed, 52 insertions, 4 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 298b73b..d98a591 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,14 @@ +2019-03-08 François Dumont <fdumont@gcc.gnu.org> + + PR libstdc++/89608 + * include/debug/unordered_map (unordered_map<>::_M_check_rehashed): + Invalidate all iterators in case of rehash. + (unordered_multimap<>::_M_check_rehashed): Likewise. + * include/debug/unordered_set + (unordered_set<>::_M_check_rehashed): Likewise. + (unordered_multiset<>::_M_check_rehashed): Likewise. + * testsuite/23_containers/unordered_set/debug/89608_neg.cc: New. + 2019-03-07 Andreas Schwab <schwab@suse.de> * config/abi/post/riscv64-linux-gnu: New directory. diff --git a/libstdc++-v3/include/debug/unordered_map b/libstdc++-v3/include/debug/unordered_map index 6dde32a..0a7485d 100644 --- a/libstdc++-v3/include/debug/unordered_map +++ b/libstdc++-v3/include/debug/unordered_map @@ -611,7 +611,7 @@ namespace __debug _M_check_rehashed(size_type __prev_count) { if (__prev_count != this->bucket_count()) - this->_M_invalidate_locals(); + this->_M_invalidate_all(); } void @@ -1210,7 +1210,7 @@ namespace __debug _M_check_rehashed(size_type __prev_count) { if (__prev_count != this->bucket_count()) - this->_M_invalidate_locals(); + this->_M_invalidate_all(); } void diff --git a/libstdc++-v3/include/debug/unordered_set b/libstdc++-v3/include/debug/unordered_set index 8d5625e..a593143 100644 --- a/libstdc++-v3/include/debug/unordered_set +++ b/libstdc++-v3/include/debug/unordered_set @@ -496,7 +496,7 @@ namespace __debug _M_check_rehashed(size_type __prev_count) { if (__prev_count != this->bucket_count()) - this->_M_invalidate_locals(); + this->_M_invalidate_all(); } void @@ -1050,7 +1050,7 @@ namespace __debug _M_check_rehashed(size_type __prev_count) { if (__prev_count != this->bucket_count()) - this->_M_invalidate_locals(); + this->_M_invalidate_all(); } void diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/89608_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/89608_neg.cc new file mode 100644 index 0000000..871b1c3 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/89608_neg.cc @@ -0,0 +1,37 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. +// +// { dg-do run { target c++11 xfail *-*-* } } +// { dg-require-debug-mode "" } + +// PR libstdc++/89608 + +#include <unordered_set> + +int main() +{ + std::unordered_set<int> myset; + myset.reserve(2); + myset.insert(0); + myset.insert(1); + + int i = 2; + for (auto it = myset.begin(), end = myset.end(); it != end; ++it) + myset.insert(i++); + + return 0; +} |