diff options
author | David Turner <digit@android.com> | 2013-12-03 09:30:56 +0800 |
---|---|---|
committer | Andrew Hsieh <andrewhsieh@google.com> | 2013-12-03 09:37:01 +0800 |
commit | bfad6b9d996c13f4be3625f095152eb9f0a175bc (patch) | |
tree | 6b2dd90e01c20cefc5b2d7e2962e97d3aa0a1dc2 /gcc-4.8 | |
parent | 4d3bdb33401f0a3285e7b3bbedd71d915473f188 (diff) | |
download | toolchain_gcc-bfad6b9d996c13f4be3625f095152eb9f0a175bc.tar.gz toolchain_gcc-bfad6b9d996c13f4be3625f095152eb9f0a175bc.tar.bz2 toolchain_gcc-bfad6b9d996c13f4be3625f095152eb9f0a175bc.zip |
[4.8] fix for GCC 4.8.2 libstdc++ bug in std::nth_element
Backport fix for a GCC 4.8 libstdc++ issue where the generated code
random segfault on std::nth_element
See https://code.google.com/p/android/issues/detail?id=62910
2013-10-20 Chris Jefferson <chris@bubblescope.net>
Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/58800
* include/bits/stl_algo.h (__unguarded_partition_pivot): Change
__last - 2 to __last - 1.
* testsuite/25_algorithms/nth_element/58800.cc: New
Change-Id: I76f86bb7162a6bbc340dac84f54c16a97f9f18fc
Diffstat (limited to 'gcc-4.8')
-rw-r--r-- | gcc-4.8/ChangeLog.backported | 9 | ||||
-rw-r--r-- | gcc-4.8/libstdc++-v3/include/bits/stl_algo.h | 4 | ||||
-rw-r--r-- | gcc-4.8/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc | 52 |
3 files changed, 63 insertions, 2 deletions
diff --git a/gcc-4.8/ChangeLog.backported b/gcc-4.8/ChangeLog.backported index b585806de..c03ee2536 100644 --- a/gcc-4.8/ChangeLog.backported +++ b/gcc-4.8/ChangeLog.backported @@ -1,3 +1,12 @@ +http://gcc.gnu.org/viewcvs?rev=203874&root=gcc&view=rev +2013-10-20 Chris Jefferson <chris@bubblescope.net> + Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/58800 + * include/bits/stl_algo.h (__unguarded_partition_pivot): Change + __last - 2 to __last - 1. + * testsuite/25_algorithms/nth_element/58800.cc: New + http://gcc.gnu.org/viewcvs/gcc?view=revision&revision=204203 2013-10-30 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> PR target/58854 diff --git a/gcc-4.8/libstdc++-v3/include/bits/stl_algo.h b/gcc-4.8/libstdc++-v3/include/bits/stl_algo.h index 35b5fa6fb..7fa7133ae 100644 --- a/gcc-4.8/libstdc++-v3/include/bits/stl_algo.h +++ b/gcc-4.8/libstdc++-v3/include/bits/stl_algo.h @@ -2279,7 +2279,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _RandomAccessIterator __last) { _RandomAccessIterator __mid = __first + (__last - __first) / 2; - std::__move_median_to_first(__first, __first + 1, __mid, (__last - 2)); + std::__move_median_to_first(__first, __first + 1, __mid, __last - 1); return std::__unguarded_partition(__first + 1, __last, *__first); } @@ -2291,7 +2291,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _RandomAccessIterator __last, _Compare __comp) { _RandomAccessIterator __mid = __first + (__last - __first) / 2; - std::__move_median_to_first(__first, __first + 1, __mid, (__last - 2), + std::__move_median_to_first(__first, __first + 1, __mid, __last - 1, __comp); return std::__unguarded_partition(__first + 1, __last, *__first, __comp); } diff --git a/gcc-4.8/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc b/gcc-4.8/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc new file mode 100644 index 000000000..108c0e5ab --- /dev/null +++ b/gcc-4.8/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc @@ -0,0 +1,52 @@ +// Copyright (C) 2013 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 even 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.2 [lib.alg.nth.element] + +// { dg-options "-std=gnu++11" } + +#include <algorithm> +#include <testsuite_hooks.h> +#include <testsuite_iterators.h> + +using __gnu_test::test_container; +using __gnu_test::random_access_iterator_wrapper; + +typedef test_container<int, random_access_iterator_wrapper> Container; + +void test01() +{ + std::vector<int> v = { + 207089, + 202585, + 180067, + 157549, + 211592, + 216096, + 207089 + }; + + Container con(v.data(), v.data() + 7); + + std::nth_element(con.begin(), con.begin() + 3, con.end()); +} + +int main() +{ + test01(); + return 0; +} |