Patchwork fix libstdc++/60499

login
register
mail settings
Submitter Jonathan Wakely
Date March 11, 2014, 5:16 p.m.
Message ID <20140311171646.GA28475@redhat.com>
Download mbox | patch
Permalink /patch/329178/
State New
Headers show

Comments

Jonathan Wakely - March 11, 2014, 5:16 p.m.
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 <jwakely@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

Patch

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);