diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2008-05-31 23:01:09 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2008-05-31 23:01:09 +0000 |
commit | f8af8c09eccb9b1c824a7c2ab53dcd0c99352029 (patch) | |
tree | a1930641e70d9ae196c1dd45fcad3362613d7091 | |
parent | 7306494a7e4a2dfd05dc3c2a51ac8f29d1fad207 (diff) | |
download | gcc-f8af8c09eccb9b1c824a7c2ab53dcd0c99352029.zip gcc-f8af8c09eccb9b1c824a7c2ab53dcd0c99352029.tar.gz gcc-f8af8c09eccb9b1c824a7c2ab53dcd0c99352029.tar.bz2 |
re PR libstdc++/36338 (heap_sort effectively hangs with -D_GLIBCXX_DEBUG)
2008-05-31 Paolo Carlini <paolo.carlini@oracle.com>
Chris Jefferson <chris@bubblescope.net>
PR libstdc++/36338
* include/bits/stl_heap.h (sort_heap): Use __pop_heap directly.
(pop_heap): Slightly tweak.
Co-Authored-By: Chris Jefferson <chris@bubblescope.net>
From-SVN: r136242
-rw-r--r-- | libstdc++-v3/ChangeLog | 7 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_heap.h | 18 |
2 files changed, 20 insertions, 5 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 261d5e9..614d54c 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2008-05-31 Paolo Carlini <paolo.carlini@oracle.com> + Chris Jefferson <chris@bubblescope.net> + + PR libstdc++/36338 + * include/bits/stl_heap.h (sort_heap): Use __pop_heap directly. + (pop_heap): Slightly tweak. + 2008-05-29 Paolo Carlini <paolo.carlini@oracle.com> * include/debug/bitset (bitset(const char*)): Implement DR 778 diff --git a/libstdc++-v3/include/bits/stl_heap.h b/libstdc++-v3/include/bits/stl_heap.h index bbe76e7..4deafd2f 100644 --- a/libstdc++-v3/include/bits/stl_heap.h +++ b/libstdc++-v3/include/bits/stl_heap.h @@ -1,6 +1,6 @@ // Heap implementation -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -285,7 +285,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_heap(__first, __last); - std::__pop_heap(__first, __last - 1, __last - 1); + --__last; + std::__pop_heap(__first, __last, __last); } template<typename _RandomAccessIterator, typename _Distance, @@ -355,7 +356,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __glibcxx_requires_valid_range(__first, __last); __glibcxx_requires_heap_pred(__first, __last, __comp); - std::__pop_heap(__first, __last - 1, __last - 1, __comp); + --__last; + std::__pop_heap(__first, __last, __last, __comp); } /** @@ -458,7 +460,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __glibcxx_requires_heap(__first, __last); while (__last - __first > 1) - std::pop_heap(__first, _RandomAccessIterator(__last--)); + { + --__last; + std::__pop_heap(__first, __last, __last); + } } /** @@ -483,7 +488,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __glibcxx_requires_heap_pred(__first, __last, __comp); while (__last - __first > 1) - std::pop_heap(__first, _RandomAccessIterator(__last--), __comp); + { + --__last; + std::__pop_heap(__first, __last, __last, __comp); + } } #ifdef __GXX_EXPERIMENTAL_CXX0X__ |