aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2008-05-31 23:01:09 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2008-05-31 23:01:09 +0000
commitf8af8c09eccb9b1c824a7c2ab53dcd0c99352029 (patch)
treea1930641e70d9ae196c1dd45fcad3362613d7091
parent7306494a7e4a2dfd05dc3c2a51ac8f29d1fad207 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--libstdc++-v3/include/bits/stl_heap.h18
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__