This is a 4.9 regression due to a non-uglified name being used in debug mode containers.
Tested x86_64-linux, normal and debug mode, committed to trunk.
commit 39cc9a9e195aa90027fcc40083b913016b83f0e5 Author: Jonathan Wakely <jwak...@redhat.com> Date: Tue Mar 11 10:47:52 2014 +0000 PR libstdc++/60499 * include/debug/forward_list (forward_list::operator=(forward_list&&)): Uglify name. * include/debug/map (map::operator=(map&&)): Likewise. * include/debug/multimap (multimap::operator=(multimap&&)): Likewise. * include/debug/multiset (multiset::operator=(multiset&&)): Likewise. * include/debug/set (set::operator=(set&&)): Likewise. * include/debug/unordered_map (unordered_map::operator=(unordered_map&&)): Likewise. (unordered_multimap::operator=(unordered_multimap&&)): Likewise. * include/debug/unordered_set (unordered_set::operator=(unordered_set&&)): Likewise. (unordered_multiset::operator=(unordered_multiset&&)): Likewise. * include/debug/vector (vector::operator=(vector&&)): Likewise. * testsuite/23_containers/forward_list/debug/60499.cc: New * testsuite/23_containers/map/debug/60499.cc: New * testsuite/23_containers/multimap/debug/60499.cc: New * testsuite/23_containers/multiset/debug/60499.cc: New * testsuite/23_containers/set/debug/60499.cc: New * testsuite/23_containers/unordered_map/debug/60499.cc: New * testsuite/23_containers/unordered_multimap/debug/60499.cc: New * testsuite/23_containers/unordered_multiset/debug/60499.cc: New * testsuite/23_containers/unordered_set/debug/60499.cc: New * testsuite/23_containers/vector/debug/60499.cc: New diff --git a/libstdc++-v3/include/debug/forward_list b/libstdc++-v3/include/debug/forward_list index f2984c9..12f6d7f 100644 --- a/libstdc++-v3/include/debug/forward_list +++ b/libstdc++-v3/include/debug/forward_list @@ -140,10 +140,10 @@ namespace __debug noexcept(_Node_alloc_traits::_S_nothrow_move()) { __glibcxx_check_self_move_assign(__list); - bool xfer_memory = _Node_alloc_traits::_S_propagate_on_move_assign() + bool __xfer_memory = _Node_alloc_traits::_S_propagate_on_move_assign() || __list.get_allocator() == this->get_allocator(); static_cast<_Base&>(*this) = std::move(__list); - if (xfer_memory) + if (__xfer_memory) this->_M_swap(__list); else this->_M_invalidate_all(); diff --git a/libstdc++-v3/include/debug/map.h b/libstdc++-v3/include/debug/map.h index bd68c99..fda6ac1 100644 --- a/libstdc++-v3/include/debug/map.h +++ b/libstdc++-v3/include/debug/map.h @@ -148,10 +148,10 @@ namespace __debug noexcept(_Alloc_traits::_S_nothrow_move()) { __glibcxx_check_self_move_assign(__x); - bool xfer_memory = _Alloc_traits::_S_propagate_on_move_assign() + bool __xfer_memory = _Alloc_traits::_S_propagate_on_move_assign() || __x.get_allocator() == this->get_allocator(); _M_base() = std::move(__x._M_base()); - if (xfer_memory) + if (__xfer_memory) this->_M_swap(__x); else this->_M_invalidate_all(); diff --git a/libstdc++-v3/include/debug/multimap.h b/libstdc++-v3/include/debug/multimap.h index fad80cc..4c3a3eb 100644 --- a/libstdc++-v3/include/debug/multimap.h +++ b/libstdc++-v3/include/debug/multimap.h @@ -150,10 +150,10 @@ namespace __debug noexcept(_Alloc_traits::_S_nothrow_move()) { __glibcxx_check_self_move_assign(__x); - bool xfer_memory = _Alloc_traits::_S_propagate_on_move_assign() + bool __xfer_memory = _Alloc_traits::_S_propagate_on_move_assign() || __x.get_allocator() == this->get_allocator(); _M_base() = std::move(__x._M_base()); - if (xfer_memory) + if (__xfer_memory) this->_M_swap(__x); else this->_M_invalidate_all(); diff --git a/libstdc++-v3/include/debug/multiset.h b/libstdc++-v3/include/debug/multiset.h index bd555b3..ae62bf8 100644 --- a/libstdc++-v3/include/debug/multiset.h +++ b/libstdc++-v3/include/debug/multiset.h @@ -149,10 +149,10 @@ namespace __debug noexcept(_Alloc_traits::_S_nothrow_move()) { __glibcxx_check_self_move_assign(__x); - bool xfer_memory = _Alloc_traits::_S_propagate_on_move_assign() + bool __xfer_memory = _Alloc_traits::_S_propagate_on_move_assign() || __x.get_allocator() == this->get_allocator(); _M_base() = std::move(__x._M_base()); - if (xfer_memory) + if (__xfer_memory) this->_M_swap(__x); else this->_M_invalidate_all(); diff --git a/libstdc++-v3/include/debug/set.h b/libstdc++-v3/include/debug/set.h index f40ecec..c83e2af 100644 --- a/libstdc++-v3/include/debug/set.h +++ b/libstdc++-v3/include/debug/set.h @@ -148,10 +148,10 @@ namespace __debug noexcept(_Alloc_traits::_S_nothrow_move()) { __glibcxx_check_self_move_assign(__x); - bool xfer_memory = _Alloc_traits::_S_propagate_on_move_assign() + bool __xfer_memory = _Alloc_traits::_S_propagate_on_move_assign() || __x.get_allocator() == this->get_allocator(); _M_base() = std::move(__x._M_base()); - if (xfer_memory) + if (__xfer_memory) this->_M_swap(__x); else this->_M_invalidate_all(); diff --git a/libstdc++-v3/include/debug/unordered_map b/libstdc++-v3/include/debug/unordered_map index 821bf0b..626beba 100644 --- a/libstdc++-v3/include/debug/unordered_map +++ b/libstdc++-v3/include/debug/unordered_map @@ -143,10 +143,10 @@ namespace __debug noexcept(_Alloc_traits::_S_nothrow_move()) { __glibcxx_check_self_move_assign(__x); - bool xfer_memory = _Alloc_traits::_S_propagate_on_move_assign() + bool __xfer_memory = _Alloc_traits::_S_propagate_on_move_assign() || __x.get_allocator() == this->get_allocator(); _M_base() = std::move(__x._M_base()); - if (xfer_memory) + if (__xfer_memory) this->_M_swap(__x); else this->_M_invalidate_all(); @@ -599,10 +599,10 @@ namespace __debug noexcept(_Alloc_traits::_S_nothrow_move()) { __glibcxx_check_self_move_assign(__x); - bool xfer_memory = _Alloc_traits::_S_propagate_on_move_assign() + bool __xfer_memory = _Alloc_traits::_S_propagate_on_move_assign() || __x.get_allocator() == this->get_allocator(); _M_base() = std::move(__x._M_base()); - if (xfer_memory) + if (__xfer_memory) this->_M_swap(__x); else this->_M_invalidate_all(); diff --git a/libstdc++-v3/include/debug/unordered_set b/libstdc++-v3/include/debug/unordered_set index 3bc3fab..a17efd0 100644 --- a/libstdc++-v3/include/debug/unordered_set +++ b/libstdc++-v3/include/debug/unordered_set @@ -142,10 +142,10 @@ namespace __debug noexcept(_Alloc_traits::_S_nothrow_move()) { __glibcxx_check_self_move_assign(__x); - bool xfer_memory = _Alloc_traits::_S_propagate_on_move_assign() + bool __xfer_memory = _Alloc_traits::_S_propagate_on_move_assign() || __x.get_allocator() == this->get_allocator(); _M_base() = std::move(__x._M_base()); - if (xfer_memory) + if (__xfer_memory) this->_M_swap(__x); else this->_M_invalidate_all(); @@ -593,10 +593,10 @@ namespace __debug noexcept(_Alloc_traits::_S_nothrow_move()) { __glibcxx_check_self_move_assign(__x); - bool xfer_memory = _Alloc_traits::_S_propagate_on_move_assign() + bool __xfer_memory = _Alloc_traits::_S_propagate_on_move_assign() || __x.get_allocator() == this->get_allocator(); _M_base() = std::move(__x._M_base()); - if (xfer_memory) + if (__xfer_memory) this->_M_swap(__x); else this->_M_invalidate_all(); diff --git a/libstdc++-v3/include/debug/vector b/libstdc++-v3/include/debug/vector index 58d98ef..bcca520 100644 --- a/libstdc++-v3/include/debug/vector +++ b/libstdc++-v3/include/debug/vector @@ -163,10 +163,10 @@ namespace __debug operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move()) { __glibcxx_check_self_move_assign(__x); - bool xfer_memory = _Alloc_traits::_S_propagate_on_move_assign() + bool __xfer_memory = _Alloc_traits::_S_propagate_on_move_assign() || __x.get_allocator() == this->get_allocator(); _M_base() = std::move(__x._M_base()); - if (xfer_memory) + if (__xfer_memory) this->_M_swap(__x); else this->_M_invalidate_all(); diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/60499.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/60499.cc new file mode 100644 index 0000000..f65ed2b --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/60499.cc @@ -0,0 +1,27 @@ +// Copyright (C) 2014 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-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do compile } + +// PR libstdc++/60499 + +#define xfer_memory 1 +#include <forward_list> + +std::forward_list<int> a, b = std::move(a); diff --git a/libstdc++-v3/testsuite/23_containers/map/debug/60499.cc b/libstdc++-v3/testsuite/23_containers/map/debug/60499.cc new file mode 100644 index 0000000..ba868fd --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/map/debug/60499.cc @@ -0,0 +1,27 @@ +// Copyright (C) 2014 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-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do compile } + +// PR libstdc++/60499 + +#define xfer_memory 1 +#include <map> + +std::map<int, int> a, b = std::move(a); diff --git a/libstdc++-v3/testsuite/23_containers/multimap/debug/60499.cc b/libstdc++-v3/testsuite/23_containers/multimap/debug/60499.cc new file mode 100644 index 0000000..38b8bcd --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/multimap/debug/60499.cc @@ -0,0 +1,27 @@ +// Copyright (C) 2014 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-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do compile } + +// PR libstdc++/60499 + +#define xfer_memory 1 +#include <map> + +std::multimap<int, int> a, b = std::move(a); diff --git a/libstdc++-v3/testsuite/23_containers/multiset/debug/60499.cc b/libstdc++-v3/testsuite/23_containers/multiset/debug/60499.cc new file mode 100644 index 0000000..b0a5cde --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/multiset/debug/60499.cc @@ -0,0 +1,27 @@ +// Copyright (C) 2014 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-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do compile } + +// PR libstdc++/60499 + +#define xfer_memory 1 +#include <set> + +std::multiset<int> a, b = std::move(a); diff --git a/libstdc++-v3/testsuite/23_containers/set/debug/60499.cc b/libstdc++-v3/testsuite/23_containers/set/debug/60499.cc new file mode 100644 index 0000000..80f3223 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/set/debug/60499.cc @@ -0,0 +1,27 @@ +// Copyright (C) 2014 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-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do compile } + +// PR libstdc++/60499 + +#define xfer_memory 1 +#include <set> + +std::set<int> a, b = std::move(a); diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/60499.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/60499.cc new file mode 100644 index 0000000..7915f8e --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/60499.cc @@ -0,0 +1,27 @@ +// Copyright (C) 2014 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-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do compile } + +// PR libstdc++/60499 + +#define xfer_memory 1 +#include <unordered_map> + +std::unordered_map<int, int> a, b = std::move(a); diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/60499.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/60499.cc new file mode 100644 index 0000000..3a41039 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/debug/60499.cc @@ -0,0 +1,27 @@ +// Copyright (C) 2014 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-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do compile } + +// PR libstdc++/60499 + +#define xfer_memory 1 +#include <unordered_map> + +std::unordered_multimap<int, int> a, b = std::move(a); diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/60499.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/60499.cc new file mode 100644 index 0000000..7f61cc7 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/debug/60499.cc @@ -0,0 +1,27 @@ +// Copyright (C) 2014 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-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do compile } + +// PR libstdc++/60499 + +#define xfer_memory 1 +#include <unordered_set> + +std::unordered_multiset<int> a, b = std::move(a); diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/60499.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/60499.cc new file mode 100644 index 0000000..a9c71a5 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/60499.cc @@ -0,0 +1,27 @@ +// Copyright (C) 2014 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-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do compile } + +// PR libstdc++/60499 + +#define xfer_memory 1 +#include <unordered_set> + +std::unordered_set<int> a, b = std::move(a); diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/60499.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/60499.cc new file mode 100644 index 0000000..9ba4dfe --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/vector/debug/60499.cc @@ -0,0 +1,27 @@ +// Copyright (C) 2014 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-require-debug-mode "" } +// { dg-options "-std=gnu++11" } +// { dg-do compile } + +// PR libstdc++/60499 + +#define xfer_memory 1 +#include <vector> + +std::vector<int> a, b = std::move(a);