diff options
author | Jonathan Wakely <jwakely.gcc@gmail.com> | 2011-12-03 15:35:35 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2011-12-03 15:35:35 +0000 |
commit | a8028a3ee823ad31d8aecfa610c99af3da92c4ea (patch) | |
tree | b4f081c14bfc657eff0e2dff052a226d3aa19e6d | |
parent | 4ddd278c032e0b144c447129a5008c05ef4db698 (diff) | |
download | gcc-a8028a3ee823ad31d8aecfa610c99af3da92c4ea.zip gcc-a8028a3ee823ad31d8aecfa610c99af3da92c4ea.tar.gz gcc-a8028a3ee823ad31d8aecfa610c99af3da92c4ea.tar.bz2 |
macros.h (__glibcxx_check_non_empty_range): Define.
* include/debug/macros.h (__glibcxx_check_non_empty_range): Define.
* include/debug/debug.h (__glibcxx_requires_non_empty_range): Define.
* include/debug/formatter.h (__msg_non_empty_range): Add.
* src/debug.cc: Message text for __msg_non_empty_range.
* include/bits/stl_heap.h (pop_heap): Check for non-empty range.
* testsuite/25_algorithms/pop_heap/empty_neg.cc: New.
From-SVN: r181970
-rw-r--r-- | libstdc++-v3/ChangeLog | 9 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_heap.h | 6 | ||||
-rw-r--r-- | libstdc++-v3/include/debug/debug.h | 5 | ||||
-rw-r--r-- | libstdc++-v3/include/debug/formatter.h | 3 | ||||
-rw-r--r-- | libstdc++-v3/include/debug/macros.h | 7 | ||||
-rw-r--r-- | libstdc++-v3/src/debug.cc | 3 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/25_algorithms/pop_heap/empty_neg.cc | 37 |
7 files changed, 65 insertions, 5 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 891b184..c070e89 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,14 @@ 2011-12-03 Jonathan Wakely <jwakely.gcc@gmail.com> + * include/debug/macros.h (__glibcxx_check_non_empty_range): Define. + * include/debug/debug.h (__glibcxx_requires_non_empty_range): Define. + * include/debug/formatter.h (__msg_non_empty_range): Add. + * src/debug.cc: Message text for __msg_non_empty_range. + * include/bits/stl_heap.h (pop_heap): Check for non-empty range. + * testsuite/25_algorithms/pop_heap/empty_neg.cc: New. + +2011-12-03 Jonathan Wakely <jwakely.gcc@gmail.com> + * doc/xml/manual/utilities.xml: Remove outdated text. 2011-12-02 Paolo Carlini <paolo.carlini@oracle.com> diff --git a/libstdc++-v3/include/bits/stl_heap.h b/libstdc++-v3/include/bits/stl_heap.h index bd638a3..ed7750c 100644 --- a/libstdc++-v3/include/bits/stl_heap.h +++ b/libstdc++-v3/include/bits/stl_heap.h @@ -1,7 +1,7 @@ // Heap implementation -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 -// Free Software Foundation, Inc. +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +// 2011 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 @@ -270,6 +270,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @brief Pop an element off a heap. * @param __first Start of heap. * @param __last End of heap. + * @pre [__first, __last) is a valid, non-empty range. * @ingroup heap_algorithms * * This operation pops the top of the heap. The elements __first @@ -287,6 +288,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< _RandomAccessIterator>) __glibcxx_function_requires(_LessThanComparableConcept<_ValueType>) + __glibcxx_requires_non_empty_range(__first, __last); __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_heap(__first, __last); diff --git a/libstdc++-v3/include/debug/debug.h b/libstdc++-v3/include/debug/debug.h index 6ea8e2a..e07fb12 100644 --- a/libstdc++-v3/include/debug/debug.h +++ b/libstdc++-v3/include/debug/debug.h @@ -1,6 +1,6 @@ // Debugging support implementation -*- C++ -*- -// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -64,6 +64,7 @@ namespace __gnu_debug # define _GLIBCXX_DEBUG_ONLY(_Statement) ; # define __glibcxx_requires_cond(_Cond,_Msg) # define __glibcxx_requires_valid_range(_First,_Last) +# define __glibcxx_requires_non_empty_range(_First,_Last) # define __glibcxx_requires_sorted(_First,_Last) # define __glibcxx_requires_sorted_pred(_First,_Last,_Pred) # define __glibcxx_requires_sorted_set(_First1,_Last1,_First2) @@ -96,6 +97,8 @@ namespace __gnu_debug # define __glibcxx_requires_cond(_Cond,_Msg) _GLIBCXX_DEBUG_VERIFY(_Cond,_Msg) # define __glibcxx_requires_valid_range(_First,_Last) \ __glibcxx_check_valid_range(_First,_Last) +# define __glibcxx_requires_non_empty_range(_First,_Last) \ + __glibcxx_check_non_empty_range(_First,_Last) # define __glibcxx_requires_sorted(_First,_Last) \ __glibcxx_check_sorted(_First,_Last) # define __glibcxx_requires_sorted_pred(_First,_Last,_Pred) \ diff --git a/libstdc++-v3/include/debug/formatter.h b/libstdc++-v3/include/debug/formatter.h index 8da1719..d22a173 100644 --- a/libstdc++-v3/include/debug/formatter.h +++ b/libstdc++-v3/include/debug/formatter.h @@ -108,7 +108,8 @@ namespace __gnu_debug __msg_erase_after_bad, __msg_valid_range2, // unordered sequence local iterators - __msg_local_iter_compare_bad + __msg_local_iter_compare_bad, + __msg_non_empty_range }; class _Error_formatter diff --git a/libstdc++-v3/include/debug/macros.h b/libstdc++-v3/include/debug/macros.h index 391839b..07d714d 100644 --- a/libstdc++-v3/include/debug/macros.h +++ b/libstdc++-v3/include/debug/macros.h @@ -57,6 +57,13 @@ _GLIBCXX_DEBUG_VERIFY(__gnu_debug::__valid_range(_First, _Last), \ ._M_iterator(_First, #_First) \ ._M_iterator(_Last, #_Last)) +// Verify that [_First, _Last) forms a non-empty iterator range. +#define __glibcxx_check_non_empty_range(_First,_Last) \ +_GLIBCXX_DEBUG_VERIFY(_First != _Last, \ + _M_message(__gnu_debug::__msg_non_empty_range) \ + ._M_iterator(_First, #_First) \ + ._M_iterator(_Last, #_Last)) + /** Verify that we can insert into *this with the iterator _Position. * Insertion into a container at a specific position requires that * the iterator be nonsingular, either dereferenceable or past-the-end, diff --git a/libstdc++-v3/src/debug.cc b/libstdc++-v3/src/debug.cc index cb66f70..af45ae4 100644 --- a/libstdc++-v3/src/debug.cc +++ b/libstdc++-v3/src/debug.cc @@ -176,7 +176,8 @@ namespace __gnu_debug ", \"%2.name;\" shall be before and not equal to \"%3.name;\"", // std::unordered_container::local_iterator "attempt to compare local iterators from different unordered container" - " buckets" + " buckets", + "function requires a non-empty iterator range [%1.name;, %2.name;)" }; void diff --git a/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty_neg.cc b/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty_neg.cc new file mode 100644 index 0000000..57b3f17 --- /dev/null +++ b/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty_neg.cc @@ -0,0 +1,37 @@ +// Copyright (C) 2011 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 Pred 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/>. + +// 25.3.6 Heap operations [lib.alg.heap.operations] + +// { dg-require-debug-mode "" } +// { dg-do run { xfail *-*-* } } + +#include <algorithm> + +void +test01() +{ + int i = 0; + std::pop_heap(&i, &i); +} + +int +main() +{ + test01(); + return 0; +} |