From bfad6b9d996c13f4be3625f095152eb9f0a175bc Mon Sep 17 00:00:00 2001 From: David Turner Date: Tue, 3 Dec 2013 09:30:56 +0800 Subject: [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 Paolo Carlini 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 --- gcc-4.8/ChangeLog.backported | 9 ++++ gcc-4.8/libstdc++-v3/include/bits/stl_algo.h | 4 +- .../testsuite/25_algorithms/nth_element/58800.cc | 52 ++++++++++++++++++++++ 3 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 gcc-4.8/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc (limited to 'gcc-4.8') 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 + Paolo Carlini + + 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 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 +// . + +// 25.3.2 [lib.alg.nth.element] + +// { dg-options "-std=gnu++11" } + +#include +#include +#include + +using __gnu_test::test_container; +using __gnu_test::random_access_iterator_wrapper; + +typedef test_container Container; + +void test01() +{ + std::vector 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; +} -- cgit v1.2.3