aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2010-01-03 20:30:28 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2010-01-03 20:30:28 +0000
commit5ab06c6dfee6999f0ebd2d77f53766de18e5dc5f (patch)
tree245c4584a0dd9666c492348854833672db104618
parentc9828e7878e2bb5491e8d4b6504f9050b1afb708 (diff)
downloadgcc-5ab06c6dfee6999f0ebd2d77f53766de18e5dc5f.zip
gcc-5ab06c6dfee6999f0ebd2d77f53766de18e5dc5f.tar.gz
gcc-5ab06c6dfee6999f0ebd2d77f53766de18e5dc5f.tar.bz2
set.h: Implement DR 130 here too.
2010-01-03 Paolo Carlini <paolo.carlini@oracle.com> * include/debug/set.h: Implement DR 130 here too. * include/debug/multiset.h: Likewise. * include/debug/map.h: Likewise. * include/debug/multimap.h: Likewise. * include/profile/set.h: Implement DR 130 fully. * include/profile/multiset.h: Likewise. * include/profile/map.h: Likewise. * include/profile/multimap.h: Likewise. * include/debug/list: Implement DR 1133 here too. * include/ext/pb_ds/detail/debug_map_base.hpp: Comment out for now uses of __gnu_cxx::throw_allocator. * testsuite/21_strings/basic_string/40160.cc: Don't pass explicitly -D_GLIBCXX_DEBUG, doesn't play well with profile-mode testing. From-SVN: r155594
-rw-r--r--libstdc++-v3/ChangeLog17
-rw-r--r--libstdc++-v3/include/debug/list33
-rw-r--r--libstdc++-v3/include/debug/map.h25
-rw-r--r--libstdc++-v3/include/debug/multimap.h27
-rw-r--r--libstdc++-v3/include/debug/multiset.h27
-rw-r--r--libstdc++-v3/include/debug/set.h28
-rw-r--r--libstdc++-v3/include/ext/pb_ds/detail/debug_map_base.hpp30
-rw-r--r--libstdc++-v3/include/profile/map.h14
-rw-r--r--libstdc++-v3/include/profile/multimap.h22
-rw-r--r--libstdc++-v3/include/profile/multiset.h24
-rw-r--r--libstdc++-v3/include/profile/set.h24
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/40160.cc4
12 files changed, 227 insertions, 48 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index f77a301..9186559 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,22 @@
2010-01-03 Paolo Carlini <paolo.carlini@oracle.com>
+ * include/debug/set.h: Implement DR 130 here too.
+ * include/debug/multiset.h: Likewise.
+ * include/debug/map.h: Likewise.
+ * include/debug/multimap.h: Likewise.
+ * include/profile/set.h: Implement DR 130 fully.
+ * include/profile/multiset.h: Likewise.
+ * include/profile/map.h: Likewise.
+ * include/profile/multimap.h: Likewise.
+ * include/debug/list: Implement DR 1133 here too.
+ * include/ext/pb_ds/detail/debug_map_base.hpp: Comment out for
+ now uses of __gnu_cxx::throw_allocator.
+ * testsuite/21_strings/basic_string/40160.cc: Don't pass
+ explicitly -D_GLIBCXX_DEBUG, doesn't play well with profile-mode
+ testing.
+
+2010-01-03 Paolo Carlini <paolo.carlini@oracle.com>
+
* include/profile/bitset (bitset<>::bitset(unsigned long long)): Add
in C++0x mode.
* include/debug/bitset (bitset<>::bitset(unsigned long long)):
diff --git a/libstdc++-v3/include/debug/list b/libstdc++-v3/include/debug/list
index 72060e0..3af008c 100644
--- a/libstdc++-v3/include/debug/list
+++ b/libstdc++-v3/include/debug/list
@@ -1,6 +1,6 @@
// Debugging list implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -395,6 +395,12 @@ namespace __debug
this->splice(__position, _GLIBCXX_MOVE(__x), __x.begin(), __x.end());
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ void
+ splice(iterator __position, list& __x)
+ { splice(__position, std::move(__x)); }
+#endif
+
void
#ifdef __GXX_EXPERIMENTAL_CXX0X__
splice(iterator __position, list&& __x, iterator __i)
@@ -421,6 +427,12 @@ namespace __debug
__i.base());
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ void
+ splice(iterator __position, list& __x, iterator __i)
+ { splice(__position, std::move(__x), __i); }
+#endif
+
void
#ifdef __GXX_EXPERIMENTAL_CXX0X__
splice(iterator __position, list&& __x, iterator __first,
@@ -457,6 +469,12 @@ namespace __debug
__first.base(), __last.base());
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ void
+ splice(iterator __position, list& __x, iterator __first, iterator __last)
+ { splice(__position, std::move(__x), __first, __last); }
+#endif
+
void
remove(const _Tp& __value)
{
@@ -541,6 +559,12 @@ namespace __debug
}
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ void
+ merge(list& __x)
+ { merge(std::move(__x)); }
+#endif
+
template<class _Compare>
void
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -566,6 +590,13 @@ namespace __debug
}
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ template<typename _Compare>
+ void
+ merge(list& __x, _Compare __comp)
+ { merge(std::move(__x), __comp); }
+#endif
+
void
sort() { _Base::sort(); }
diff --git a/libstdc++-v3/include/debug/map.h b/libstdc++-v3/include/debug/map.h
index 2ac21df..9a558b5 100644
--- a/libstdc++-v3/include/debug/map.h
+++ b/libstdc++-v3/include/debug/map.h
@@ -1,6 +1,6 @@
// Debugging map implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -228,6 +228,15 @@ namespace __debug
_Base::insert(__first, __last);
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ iterator
+ erase(iterator __position)
+ {
+ __glibcxx_check_erase(__position);
+ __position._M_invalidate();
+ return iterator(_Base::erase(__position.base()), this);
+ }
+#else
void
erase(iterator __position)
{
@@ -235,6 +244,7 @@ namespace __debug
__position._M_invalidate();
_Base::erase(__position.base());
}
+#endif
size_type
erase(const key_type& __x)
@@ -250,6 +260,18 @@ namespace __debug
}
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ iterator
+ erase(iterator __first, iterator __last)
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 151. can't currently clear() empty container
+ __glibcxx_check_erase_range(__first, __last);
+ while (__first != __last)
+ this->erase(__first++);
+ return __last;
+ }
+#else
void
erase(iterator __first, iterator __last)
{
@@ -259,6 +281,7 @@ namespace __debug
while (__first != __last)
this->erase(__first++);
}
+#endif
void
swap(map& __x)
diff --git a/libstdc++-v3/include/debug/multimap.h b/libstdc++-v3/include/debug/multimap.h
index 3c525b5..f69a289 100644
--- a/libstdc++-v3/include/debug/multimap.h
+++ b/libstdc++-v3/include/debug/multimap.h
@@ -1,6 +1,6 @@
// Debugging multimap implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -215,6 +215,15 @@ namespace __debug
_Base::insert(__first, __last);
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ iterator
+ erase(iterator __position)
+ {
+ __glibcxx_check_erase(__position);
+ __position._M_invalidate();
+ return iterator(_Base::erase(__position.base()), this);
+ }
+#else
void
erase(iterator __position)
{
@@ -222,6 +231,7 @@ namespace __debug
__position._M_invalidate();
_Base::erase(__position.base());
}
+#endif
size_type
erase(const key_type& __x)
@@ -238,6 +248,18 @@ namespace __debug
return __count;
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ iterator
+ erase(iterator __first, iterator __last)
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 151. can't currently clear() empty container
+ __glibcxx_check_erase_range(__first, __last);
+ while (__first != __last)
+ this->erase(__first++);
+ return __last;
+ }
+#else
void
erase(iterator __first, iterator __last)
{
@@ -245,8 +267,9 @@ namespace __debug
// 151. can't currently clear() empty container
__glibcxx_check_erase_range(__first, __last);
while (__first != __last)
- this->erase(__first++);
+ this->erase(__first++);
}
+#endif
void
swap(multimap& __x)
diff --git a/libstdc++-v3/include/debug/multiset.h b/libstdc++-v3/include/debug/multiset.h
index 1a15c20..9190982 100644
--- a/libstdc++-v3/include/debug/multiset.h
+++ b/libstdc++-v3/include/debug/multiset.h
@@ -1,6 +1,6 @@
// Debugging multiset implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -212,6 +212,15 @@ namespace __debug
{ _Base::insert(__l); }
#endif
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ iterator
+ erase(iterator __position)
+ {
+ __glibcxx_check_erase(__position);
+ __position._M_invalidate();
+ return iterator(_Base::erase(__position.base()), this);
+ }
+#else
void
erase(iterator __position)
{
@@ -219,6 +228,7 @@ namespace __debug
__position._M_invalidate();
_Base::erase(__position.base());
}
+#endif
size_type
erase(const key_type& __x)
@@ -235,6 +245,18 @@ namespace __debug
return __count;
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ iterator
+ erase(iterator __first, iterator __last)
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 151. can't currently clear() empty container
+ __glibcxx_check_erase_range(__first, __last);
+ while (__first != __last)
+ this->erase(__first++);
+ return __last;
+ }
+#else
void
erase(iterator __first, iterator __last)
{
@@ -242,8 +264,9 @@ namespace __debug
// 151. can't currently clear() empty container
__glibcxx_check_erase_range(__first, __last);
while (__first != __last)
- this->erase(__first++);
+ this->erase(__first++);
}
+#endif
void
swap(multiset& __x)
diff --git a/libstdc++-v3/include/debug/set.h b/libstdc++-v3/include/debug/set.h
index b822ba9..769639d 100644
--- a/libstdc++-v3/include/debug/set.h
+++ b/libstdc++-v3/include/debug/set.h
@@ -1,6 +1,6 @@
// Debugging set implementation -*- C++ -*-
-// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009
+// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -217,6 +217,15 @@ namespace __debug
{ _Base::insert(__l); }
#endif
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ iterator
+ erase(iterator __position)
+ {
+ __glibcxx_check_erase(__position);
+ __position._M_invalidate();
+ return iterator(_Base::erase(__position.base()), this);
+ }
+#else
void
erase(iterator __position)
{
@@ -224,6 +233,7 @@ namespace __debug
__position._M_invalidate();
_Base::erase(__position.base());
}
+#endif
size_type
erase(const key_type& __x)
@@ -239,16 +249,28 @@ namespace __debug
}
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ iterator
+ erase(iterator __first, iterator __last)
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 151. can't currently clear() empty container
+ __glibcxx_check_erase_range(__first, __last);
+ while (__first != __last)
+ this->erase(__first++);
+ return __last;
+ }
+#else
void
erase(iterator __first, iterator __last)
{
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 151. can't currently clear() empty container
__glibcxx_check_erase_range(__first, __last);
-
while (__first != __last)
- this->erase(__first++);
+ this->erase(__first++);
}
+#endif
void
swap(set& __x)
diff --git a/libstdc++-v3/include/ext/pb_ds/detail/debug_map_base.hpp b/libstdc++-v3/include/ext/pb_ds/detail/debug_map_base.hpp
index 2227691..ebe8dc8 100644
--- a/libstdc++-v3/include/ext/pb_ds/detail/debug_map_base.hpp
+++ b/libstdc++-v3/include/ext/pb_ds/detail/debug_map_base.hpp
@@ -1,6 +1,7 @@
// -*- C++ -*-
-// Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// 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
@@ -153,9 +154,10 @@ namespace __gnu_pbds
insert_new(const_key_reference r_key)
{
_GLIBCXX_DEBUG_ONLY(assert_valid();)
- __gnu_cxx::throw_allocator<char> alloc;
- const double orig_throw_prob = alloc.get_probability();
- alloc.set_probability(0);
+ // XXX FIXME: Adapt for __gnu_cxx::throw_allocator_random.
+ //__gnu_cxx::throw_allocator<char> alloc;
+ // const double orig_throw_prob = alloc.get_probability();
+ // alloc.set_probability(0);
if (find(r_key) != m_key_set.end())
{
std::cerr << "insert_new" << r_key << std::endl;
@@ -171,7 +173,7 @@ namespace __gnu_pbds
std::cerr << "insert_new" << r_key << std::endl;
std::abort();
}
- alloc.set_probability(orig_throw_prob);
+ // alloc.set_probability(orig_throw_prob);
_GLIBCXX_DEBUG_ONLY(assert_valid();)
}
@@ -314,9 +316,10 @@ namespace __gnu_pbds
PB_DS_CLASS_C_DEC::
split(const_key_reference r_key, Cmp_Fn cmp_fn, PB_DS_CLASS_C_DEC& other)
{
- __gnu_cxx::throw_allocator<char> alloc;
- const double orig_throw_prob = alloc.get_probability();
- alloc.set_probability(0);
+ // XXX FIXME: Adapt for __gnu_cxx::throw_allocator_random.
+ // __gnu_cxx::throw_allocator<char> alloc;
+ // const double orig_throw_prob = alloc.get_probability();
+ // alloc.set_probability(0);
other.clear();
key_set_iterator it = m_key_set.begin();
while (it != m_key_set.end())
@@ -327,7 +330,7 @@ namespace __gnu_pbds
}
else
++it;
- alloc.set_probability(orig_throw_prob);
+ // alloc.set_probability(orig_throw_prob);
}
PB_DS_CLASS_T_DEC
@@ -335,9 +338,10 @@ namespace __gnu_pbds
PB_DS_CLASS_C_DEC::
join(PB_DS_CLASS_C_DEC& other)
{
- __gnu_cxx::throw_allocator<char> alloc;
- const double orig_throw_prob = alloc.get_probability();
- alloc.set_probability(0);
+ // XXX FIXME: Adapt for __gnu_cxx::throw_allocator_random.
+ // __gnu_cxx::throw_allocator<char> alloc;
+ // const double orig_throw_prob = alloc.get_probability();
+ // alloc.set_probability(0);
key_set_iterator it = other.m_key_set.begin();
while (it != other.m_key_set.end())
{
@@ -345,7 +349,7 @@ namespace __gnu_pbds
it = other.m_key_set.erase(it);
}
_GLIBCXX_DEBUG_ASSERT(other.m_key_set.empty());
- alloc.set_probability(orig_throw_prob);
+ // alloc.set_probability(orig_throw_prob);
}
#undef PB_DS_CLASS_T_DEC
diff --git a/libstdc++-v3/include/profile/map.h b/libstdc++-v3/include/profile/map.h
index 0197d45..baa877d 100644
--- a/libstdc++-v3/include/profile/map.h
+++ b/libstdc++-v3/include/profile/map.h
@@ -1,6 +1,6 @@
// Profiling map implementation -*- C++ -*-
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 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
@@ -307,6 +307,17 @@ namespace __profile
}
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ iterator
+ erase(iterator __first, iterator __last)
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 151. can't currently clear() empty container
+ while (__first != __last)
+ this->erase(__first++);
+ return __last;
+ }
+#else
void
erase(iterator __first, iterator __last)
{
@@ -315,6 +326,7 @@ namespace __profile
while (__first != __last)
this->erase(__first++);
}
+#endif
void
diff --git a/libstdc++-v3/include/profile/multimap.h b/libstdc++-v3/include/profile/multimap.h
index 9a65a93..df4e02d 100644
--- a/libstdc++-v3/include/profile/multimap.h
+++ b/libstdc++-v3/include/profile/multimap.h
@@ -206,15 +206,11 @@ namespace __profile
#ifdef __GXX_EXPERIMENTAL_CXX0X__
iterator
erase(iterator __position)
- {
- return _Base::erase(__position);
- }
+ { return _Base::erase(__position); }
#else
void
erase(iterator __position)
- {
- _Base::erase(__position);
- }
+ { _Base::erase(__position); }
#endif
size_type
@@ -231,14 +227,26 @@ namespace __profile
return __count;
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ iterator
+ erase(iterator __first, iterator __last)
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 151. can't currently clear() empty container
+ while (__first != __last)
+ this->erase(__first++);
+ return __last;
+ }
+#else
void
erase(iterator __first, iterator __last)
{
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 151. can't currently clear() empty container
while (__first != __last)
- this->erase(__first++);
+ this->erase(__first++);
}
+#endif
void
swap(multimap& __x)
diff --git a/libstdc++-v3/include/profile/multiset.h b/libstdc++-v3/include/profile/multiset.h
index 69a11f4..b44abc4 100644
--- a/libstdc++-v3/include/profile/multiset.h
+++ b/libstdc++-v3/include/profile/multiset.h
@@ -1,6 +1,6 @@
// Profiling multiset implementation -*- C++ -*-
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 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
@@ -204,15 +204,11 @@ namespace __profile
#ifdef __GXX_EXPERIMENTAL_CXX0X__
iterator
erase(iterator __position)
- {
- return _Base::erase(__position);
- }
+ { return _Base::erase(__position); }
#else
void
erase(iterator __position)
- {
- _Base::erase(__position);
- }
+ { _Base::erase(__position); }
#endif
size_type
@@ -229,14 +225,26 @@ namespace __profile
return __count;
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ iterator
+ erase(iterator __first, iterator __last)
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 151. can't currently clear() empty container
+ while (__first != __last)
+ this->erase(__first++);
+ return __last;
+ }
+#else
void
erase(iterator __first, iterator __last)
{
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 151. can't currently clear() empty container
while (__first != __last)
- this->erase(__first++);
+ this->erase(__first++);
}
+#endif
void
swap(multiset& __x)
diff --git a/libstdc++-v3/include/profile/set.h b/libstdc++-v3/include/profile/set.h
index af249a2..6c6773c 100644
--- a/libstdc++-v3/include/profile/set.h
+++ b/libstdc++-v3/include/profile/set.h
@@ -1,6 +1,6 @@
// Profiling set implementation -*- C++ -*-
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 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
@@ -209,15 +209,11 @@ namespace __profile
#ifdef __GXX_EXPERIMENTAL_CXX0X__
iterator
erase(iterator __position)
- {
- return _Base::erase(__position);
- }
+ { return _Base::erase(__position); }
#else
void
erase(iterator __position)
- {
- _Base::erase(__position);
- }
+ { _Base::erase(__position); }
#endif
size_type
@@ -233,14 +229,26 @@ namespace __profile
}
}
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ iterator
+ erase(iterator __first, iterator __last)
+ {
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 151. can't currently clear() empty container
+ while (__first != __last)
+ this->erase(__first++);
+ return __last;
+ }
+#else
void
erase(iterator __first, iterator __last)
{
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 151. can't currently clear() empty container
while (__first != __last)
- this->erase(__first++);
+ this->erase(__first++);
}
+#endif
void
swap(set& __x)
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/40160.cc b/libstdc++-v3/testsuite/21_strings/basic_string/40160.cc
index 5472a75..5a746f1 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/40160.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/40160.cc
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2009 Free Software Foundation, Inc.
+// Copyright (C) 2009, 2010 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
@@ -17,7 +17,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-// { dg-options "-fno-rtti -D_GLIBCXX_DEBUG" }
+// { dg-options "-fno-rtti" }
// { dg-do compile }
// libstdc++/40160