+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.
_M_check_rehashed(size_type __prev_count)
{
if (__prev_count != this->bucket_count())
- this->_M_invalidate_locals();
+ this->_M_invalidate_all();
}
void
_M_check_rehashed(size_type __prev_count)
{
if (__prev_count != this->bucket_count())
- this->_M_invalidate_locals();
+ this->_M_invalidate_all();
}
void
_M_check_rehashed(size_type __prev_count)
{
if (__prev_count != this->bucket_count())
- this->_M_invalidate_locals();
+ this->_M_invalidate_all();
}
void
_M_check_rehashed(size_type __prev_count)
{
if (__prev_count != this->bucket_count())
- this->_M_invalidate_locals();
+ this->_M_invalidate_all();
}
void
--- /dev/null
+// 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;
+}