There are more failures that I haven't found yet, because running make check-parallel seems to take several days (because I'm running with GLIBCXX_TESTSUITE_STDS=98,11,14,17,20,23,26).
We can fix the rest later. Pushed to trunk. -- >8 -- Some of these are due to no longer using #pragma GCC system_header in libstdc++ headers, some have been failing for longer and weren't noticed. libstdc++-v3/ChangeLog: * include/parallel/algobase.h (search): Use sequential algorithm for constant evaluation. * include/parallel/algorithmfwd.h (search): Add _GLIBCXX20_CONSTEXPR. * include/parallel/multiway_merge.h: Remove stray semi-colon. * include/parallel/multiseq_selection.h: Add diagnostic pragmas for -Wlong-long warning. * include/parallel/quicksort.h: Likewise. * include/parallel/random_number.h: Likewise. * include/parallel/settings.h: Likewise. * include/parallel/workstealing.h: Replace ++ and -- on volatile variables. * testsuite/17_intro/names.cc: Skip names defined by <tr1/random>. * testsuite/20_util/pair/dangling_ref.cc: Skip test if Parallel Mode is enabled. * testsuite/20_util/tuple/dangling_ref.cc: Likewise. --- libstdc++-v3/include/parallel/algobase.h | 6 ++++++ libstdc++-v3/include/parallel/algorithmfwd.h | 1 + libstdc++-v3/include/parallel/multiseq_selection.h | 3 +++ libstdc++-v3/include/parallel/multiway_merge.h | 2 +- libstdc++-v3/include/parallel/quicksort.h | 3 +++ libstdc++-v3/include/parallel/random_number.h | 5 +++++ libstdc++-v3/include/parallel/settings.h | 5 +++++ libstdc++-v3/include/parallel/workstealing.h | 4 ++-- libstdc++-v3/testsuite/17_intro/names.cc | 6 ++++-- libstdc++-v3/testsuite/20_util/pair/dangling_ref.cc | 2 +- libstdc++-v3/testsuite/20_util/tuple/dangling_ref.cc | 2 +- 11 files changed, 32 insertions(+), 7 deletions(-) diff --git a/libstdc++-v3/include/parallel/algobase.h b/libstdc++-v3/include/parallel/algobase.h index 67362f4ecaa..b46ed610661 100644 --- a/libstdc++-v3/include/parallel/algobase.h +++ b/libstdc++-v3/include/parallel/algobase.h @@ -515,11 +515,17 @@ namespace __parallel // Public interface template<typename _FIterator1, typename _FIterator2, typename _BinaryPredicate> + _GLIBCXX20_CONSTEXPR inline _FIterator1 search(_FIterator1 __begin1, _FIterator1 __end1, _FIterator2 __begin2, _FIterator2 __end2, _BinaryPredicate __pred) { +#if __cplusplus > 201703L + if (std::is_constant_evaluated()) + return _GLIBCXX_STD_A::search(__begin1, __end1, __begin2, __end2, + std::move(__pred)); +#endif return __search_switch(__begin1, __end1, __begin2, __end2, __pred, std::__iterator_category(__begin1), std::__iterator_category(__begin2)); diff --git a/libstdc++-v3/include/parallel/algorithmfwd.h b/libstdc++-v3/include/parallel/algorithmfwd.h index 476072b860a..7c9843ab161 100644 --- a/libstdc++-v3/include/parallel/algorithmfwd.h +++ b/libstdc++-v3/include/parallel/algorithmfwd.h @@ -353,6 +353,7 @@ namespace __parallel __gnu_parallel::sequential_tag); template<typename _FIter1, typename _FIter2, typename _BiPredicate> + _GLIBCXX20_CONSTEXPR _FIter1 search(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate); diff --git a/libstdc++-v3/include/parallel/multiseq_selection.h b/libstdc++-v3/include/parallel/multiseq_selection.h index 22bd97e6432..53264fd156b 100644 --- a/libstdc++-v3/include/parallel/multiseq_selection.h +++ b/libstdc++-v3/include/parallel/multiseq_selection.h @@ -189,9 +189,12 @@ namespace __gnu_parallel __r = __rd_log2(__nmax) + 1; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" // LL literal // Pad all lists to this length, at least as long as any ns[__i], // equality iff __nmax = 2^__k - 1. __l = (1ULL << __r) - 1; +#pragma GCC diagnostic pop for (_SeqNumber __i = 0; __i < __m; __i++) { diff --git a/libstdc++-v3/include/parallel/multiway_merge.h b/libstdc++-v3/include/parallel/multiway_merge.h index e4bd0042282..d894e636a3e 100644 --- a/libstdc++-v3/include/parallel/multiway_merge.h +++ b/libstdc++-v3/include/parallel/multiway_merge.h @@ -2067,6 +2067,6 @@ namespace __gnu_parallel (__seqs_begin, __seqs_end, __target, __length, __comp, exact_tag(__tag.__get_num_threads())); } -}; // namespace __gnu_parallel +} // namespace __gnu_parallel #endif /* _GLIBCXX_PARALLEL_MULTIWAY_MERGE_H */ diff --git a/libstdc++-v3/include/parallel/quicksort.h b/libstdc++-v3/include/parallel/quicksort.h index a678b6d4690..c728cd91c24 100644 --- a/libstdc++-v3/include/parallel/quicksort.h +++ b/libstdc++-v3/include/parallel/quicksort.h @@ -66,12 +66,15 @@ namespace __gnu_parallel _ValueType* __samples = static_cast<_ValueType*> (::operator new(__num_samples * sizeof(_ValueType))); +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" // LL literal for (_DifferenceType __s = 0; __s < __num_samples; ++__s) { const unsigned long long __index = static_cast<unsigned long long> (__s) * __n / __num_samples; ::new(&(__samples[__s])) _ValueType(__begin[__index]); } +#pragma GCC diagnostic pop __gnu_sequential::sort(__samples, __samples + __num_samples, __comp); diff --git a/libstdc++-v3/include/parallel/random_number.h b/libstdc++-v3/include/parallel/random_number.h index 8f8d9cd0651..0357fab79c8 100644 --- a/libstdc++-v3/include/parallel/random_number.h +++ b/libstdc++-v3/include/parallel/random_number.h @@ -38,6 +38,9 @@ namespace __gnu_parallel { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" // LL literal + /** @brief Random number generator, based on the Mersenne twister. */ class _RandomNumber { @@ -120,6 +123,8 @@ namespace __gnu_parallel } }; +#pragma GCC diagnostic pop + } // namespace __gnu_parallel #endif /* _GLIBCXX_PARALLEL_RANDOM_NUMBER_H */ diff --git a/libstdc++-v3/include/parallel/settings.h b/libstdc++-v3/include/parallel/settings.h index 1fbe458d583..aac41649470 100644 --- a/libstdc++-v3/include/parallel/settings.h +++ b/libstdc++-v3/include/parallel/settings.h @@ -84,6 +84,9 @@ #include <parallel/types.h> +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wlong-long" // LL literal + /** * @brief Determine at compile(?)-time if the parallel variant of an * algorithm should be called. @@ -339,4 +342,6 @@ namespace __gnu_parallel }; } +#pragma GCC diagnostic pop + #endif /* _GLIBCXX_PARALLEL_SETTINGS_H */ diff --git a/libstdc++-v3/include/parallel/workstealing.h b/libstdc++-v3/include/parallel/workstealing.h index f24d542d58b..cd338fac455 100644 --- a/libstdc++-v3/include/parallel/workstealing.h +++ b/libstdc++-v3/include/parallel/workstealing.h @@ -191,8 +191,8 @@ namespace __gnu_parallel // Cannot use volatile variable directly. _DifferenceType __my_first = __my_job._M_first; __result = __f(__op, __begin + __my_first); - ++__my_job._M_first; - --__my_job._M_load; + __my_job._M_first += 1; + __my_job._M_load -= 1; } _RAIter __current; diff --git a/libstdc++-v3/testsuite/17_intro/names.cc b/libstdc++-v3/testsuite/17_intro/names.cc index 9b0ffcb50b2..6b9a3639aad 100644 --- a/libstdc++-v3/testsuite/17_intro/names.cc +++ b/libstdc++-v3/testsuite/17_intro/names.cc @@ -84,15 +84,17 @@ #define n ( #endif #define o ( -#if __cplusplus >= 201103L +#if __cplusplus >= 201103L || defined(_GLIBCXX_PARALLEL) // <random> defines member functions called p() +// (and <tr1/random> defines them too, which is included by Parallel Mode). #else #define p ( #endif #define q ( #define r ( -#if __cplusplus >= 201103L +#if __cplusplus >= 201103L || defined(_GLIBCXX_PARALLEL) // <random> defines member functions called s() and t() +// (and <tr1/random> defines them too, which is included by Parallel Mode). // <chrono> and <string> define operator ""s in C++14 #else #define s ( diff --git a/libstdc++-v3/testsuite/20_util/pair/dangling_ref.cc b/libstdc++-v3/testsuite/20_util/pair/dangling_ref.cc index ca238f9cbd1..dcfccf18a03 100644 --- a/libstdc++-v3/testsuite/20_util/pair/dangling_ref.cc +++ b/libstdc++-v3/testsuite/20_util/pair/dangling_ref.cc @@ -1,7 +1,7 @@ // { dg-do compile { target c++11 } } // { dg-options "-Wno-unused-variable" } // { dg-additional-options "-D_GLIBCXX_DEBUG" { target c++17_down } } - +// { dg-skip-if "cannot mix with DEBUG" { *-*-* } { "-D_GLIBCXX_PARALLEL" } } #include <utility> #if __cplusplus >= 202002L diff --git a/libstdc++-v3/testsuite/20_util/tuple/dangling_ref.cc b/libstdc++-v3/testsuite/20_util/tuple/dangling_ref.cc index b2dcf359438..e7271a58a2f 100644 --- a/libstdc++-v3/testsuite/20_util/tuple/dangling_ref.cc +++ b/libstdc++-v3/testsuite/20_util/tuple/dangling_ref.cc @@ -1,7 +1,7 @@ // { dg-do compile { target c++11 } } // { dg-options "-Wno-unused-variable" } // { dg-additional-options "-D_GLIBCXX_DEBUG" { target c++17_down } } - +// { dg-skip-if "cannot mix with DEBUG" { *-*-* } { "-D_GLIBCXX_PARALLEL" } } #include <tuple> #include <utility> -- 2.46.1