diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 261d5e9473dcf5c51010ae63e9f90d0683eabce3..614d54c22e87f0b7f8331d6a7a9c4d056050842f 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 bbe76e796348279e47d70ee3d6ac218a12475c17..4deafd2f4c708fbad08e3f741507fc8d2899a708 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__