summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Gregor <gregod@cs.rpi.edu>2003-11-14 00:15:00 +0000
committerBenjamin Kosnik <bkoz@gcc.gnu.org>2003-11-14 00:15:00 +0000
commit1b80d64af2d17772d767ca974b59e8d8b18a3252 (patch)
tree917d0c8c22795ee44263851c5ad26805d48a6fa9
parenta2dcfada8a9f5a4d1b53a6b43873e4b807d8f166 (diff)
downloadgcc-1b80d64af2d17772d767ca974b59e8d8b18a3252.tar.gz
debug.html: Users are allowed to specialize in namespace __gnu_debug...
2003-11-13 Douglas Gregor <gregod@cs.rpi.edu> * docs/html/debug.html: Users are allowed to specialize in namespace __gnu_debug, unlike in the Apple version of the debug mode. Clear up a confusing double-negative. Note that std::basic_string does provide extra debugging capabilities, but not safe iterators. * include/bits/basic_string.tcc: Make sure there's never an ambiguity when calling __is_null_pointer. * include/debug/deque: (deque::erase) Properly handle invalidation when erasing at the end of the deque. * include/debug/vector: (vector::swap): Swap _M_guaranteed_capacity. (vector::clear): Set the guaranteed capacity to 0. * testsuite/23_containers/deque/invalidation/4.cc: (test04): Test iterator invalidation when erasing at the end of the deque. From-SVN: r73564
-rw-r--r--libstdc++-v3/ChangeLog16
-rw-r--r--libstdc++-v3/docs/html/debug.html8
-rw-r--r--libstdc++-v3/docs/html/debug_mode.html2
-rw-r--r--libstdc++-v3/include/bits/basic_string.tcc2
-rw-r--r--libstdc++-v3/include/debug/deque2
-rw-r--r--libstdc++-v3/include/debug/vector3
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/invalidation/4.cc6
7 files changed, 32 insertions, 7 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 7d84d46fb86..8ebb98a5721 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,19 @@
+2003-11-13 Douglas Gregor <gregod@cs.rpi.edu>
+
+ * docs/html/debug.html: Users are allowed to specialize in
+ namespace __gnu_debug, unlike in the Apple version of the debug
+ mode. Clear up a confusing double-negative. Note that
+ std::basic_string does provide extra debugging capabilities, but
+ not safe iterators.
+ * include/bits/basic_string.tcc: Make sure there's never an
+ ambiguity when calling __is_null_pointer.
+ * include/debug/deque: (deque::erase) Properly handle invalidation
+ when erasing at the end of the deque.
+ * include/debug/vector: (vector::swap): Swap _M_guaranteed_capacity.
+ (vector::clear): Set the guaranteed capacity to 0.
+ * testsuite/23_containers/deque/invalidation/4.cc: (test04): Test
+ iterator invalidation when erasing at the end of the deque.
+
2003-11-13 Paolo Carlini <pcarlini@suse.de>
Petur Runolfsson <peturr02@ru.is>
diff --git a/libstdc++-v3/docs/html/debug.html b/libstdc++-v3/docs/html/debug.html
index be4a8614b0d..91e13c14429 100644
--- a/libstdc++-v3/docs/html/debug.html
+++ b/libstdc++-v3/docs/html/debug.html
@@ -145,8 +145,7 @@
functionally equivalent to the standard drop-in containers used in
debug mode, but they are available in a separate namespace as GNU
extensions and may be used in programs compiled with either release
- mode or with debug mode. However, unlike the containers in namespace
- <code>std</code>, these containers may not be specialized. The
+ mode or with debug mode. The
following table provides the names and headers of the debugging
containers:
@@ -250,7 +249,7 @@
</table>
<h4 class="left">Debug mode semantics</h4>
-<p>A program that does not use the C++ standard library incorrectly
+<p>A program that uses the C++ standard library correctly
will maintain the same semantics under debug mode as it had with
the normal (release) library. All functional and exception-handling
guarantees made by the normal library also hold for the debug mode
@@ -276,7 +275,7 @@
library, and is therefore somewhat hazardous. For this reason, the
libstdc++ debug mode offers a "pedantic" mode (similar to
GCC's <code>-pedantic</code> compiler flag) that attempts to emulate
- the semantics guaranteed by the C++ standard. In pedantic mode, for
+ the semantics guaranteed by the C++ standard. For
instance, constructing a <code>std::basic_string</code> with a NULL
character pointer would result in an exception under normal mode or
non-pedantic debug mode (this is a libstdc++ extension), whereas
@@ -288,6 +287,7 @@
<p>The following library components provide extra debugging
capabilities in debug mode:</p>
<ul>
+ <li><code>std::basic_string</code> (no safe iterators)</li>
<li><code>std::bitset</code></li>
<li><code>std::deque</code></li>
<li><code>__gnu_cxx::hash_map</code></li>
diff --git a/libstdc++-v3/docs/html/debug_mode.html b/libstdc++-v3/docs/html/debug_mode.html
index cc42dd25ef1..b62ad8f5572 100644
--- a/libstdc++-v3/docs/html/debug_mode.html
+++ b/libstdc++-v3/docs/html/debug_mode.html
@@ -330,7 +330,7 @@ template&lt;typename _Tp, typename _Allocator = allocator&lt;_Tp&gt;
<p>In release mode, we define only the release-mode version of the
component with its standard name and do not include the debugging
component at all. The release mode version is defined within the
- namespace <code>__gnu_nom</code>, and then associated with namespace
+ namespace <code>__gnu_norm</code>, and then associated with namespace
<code>std</code> via a "strong using" directive. Minus the
namespace associations, this method leaves the behavior of release
mode completely unchanged from its behavior prior to the
diff --git a/libstdc++-v3/include/bits/basic_string.tcc b/libstdc++-v3/include/bits/basic_string.tcc
index 34a373ce1a5..204757b3dc6 100644
--- a/libstdc++-v3/include/bits/basic_string.tcc
+++ b/libstdc++-v3/include/bits/basic_string.tcc
@@ -52,7 +52,7 @@ namespace std
template<typename _Type>
inline bool
- __is_null_pointer(const _Type&)
+ __is_null_pointer(_Type)
{ return false; }
template<typename _CharT, typename _Traits, typename _Alloc>
diff --git a/libstdc++-v3/include/debug/deque b/libstdc++-v3/include/debug/deque
index b9d68af598a..818d59e2b68 100644
--- a/libstdc++-v3/include/debug/deque
+++ b/libstdc++-v3/include/debug/deque
@@ -294,7 +294,7 @@ namespace __gnu_debug_def
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 151. can't currently clear() empty container
__glibcxx_check_erase_range(__first, __last);
- if (__first == begin() || __last == end()-1)
+ if (__first == begin() || __last == end())
{
this->_M_detach_singular();
for (iterator __position = __first; __position != __last; )
diff --git a/libstdc++-v3/include/debug/vector b/libstdc++-v3/include/debug/vector
index 19249b6bb81..53e6f0cc15f 100644
--- a/libstdc++-v3/include/debug/vector
+++ b/libstdc++-v3/include/debug/vector
@@ -34,6 +34,7 @@
#include <vector>
#include <debug/safe_sequence.h>
#include <debug/safe_iterator.h>
+#include <utility>
namespace __gnu_debug_def
{
@@ -328,6 +329,7 @@ namespace __gnu_debug_def
{
_Base::swap(__x);
this->_M_swap(__x);
+ std::swap(_M_guaranteed_capacity, __x._M_guaranteed_capacity);
}
void
@@ -335,6 +337,7 @@ namespace __gnu_debug_def
{
_Base::clear();
this->_M_invalidate_all();
+ _M_guaranteed_capacity = 0;
}
_Base&
diff --git a/libstdc++-v3/testsuite/23_containers/deque/invalidation/4.cc b/libstdc++-v3/testsuite/23_containers/deque/invalidation/4.cc
index 1918737cf93..c8a8b88a9ed 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/invalidation/4.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/invalidation/4.cc
@@ -55,6 +55,12 @@ void test04()
VERIFY(before._M_singular());
VERIFY(at._M_singular());
+ // Multiple element erase at end
+ before = v.begin();
+ at = before + 3;
+ v.erase(at, v.end());
+ *before;
+
// clear()
before = v.begin();
VERIFY(before._M_dereferenceable());