re PR libstdc++/36338 (heap_sort effectively hangs with -D_GLIBCXX_DEBUG)
authorPaolo Carlini <paolo.carlini@oracle.com>
Sat, 31 May 2008 23:01:09 +0000 (23:01 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Sat, 31 May 2008 23:01:09 +0000 (23:01 +0000)
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

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/stl_heap.h

index 261d5e9473dcf5c51010ae63e9f90d0683eabce3..614d54c22e87f0b7f8331d6a7a9c4d056050842f 100644 (file)
@@ -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
index bbe76e796348279e47d70ee3d6ac218a12475c17..4deafd2f4c708fbad08e3f741507fc8d2899a708 100644 (file)
@@ -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__