diff mbox series

[committed] libstdc++: Fix some Parallel Mode testsuite failures

Message ID 20241004131104.3917161-1-jwakely@redhat.com
State New
Headers show
Series [committed] libstdc++: Fix some Parallel Mode testsuite failures | expand

Commit Message

Jonathan Wakely Oct. 4, 2024, 1:09 p.m. UTC
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 mbox series

Patch

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>