[PATCH] libstdc++/71856 Define _GLIBCXX_PARALLEL_ASSERTIONS
Jonathan Wakely
jwakely@redhat.com
Wed Jul 13 17:27:00 GMT 2016
This fixes a conflict between how Parallel Mode has always used the
_GLIBCXX_ASSERTIONS macro and the new meaning we gave it for GCC 6
(enabling the lightweight debug checks).
It doesn't make sense for Parallel Mode to own that macro, and it
might be useful to enable Parallel Mode assertions without the other
checks, so I've changed all the Parallel Mode headers to check
_GLIBCXX_PARALLEL_ASSERTIONS instead. If that's not defined then it
defaults to the value of _GLIBCXX_ASSERTIONS, to preserve the old
behaviour.
PR libstdc++/71856
* include/bits/c++config (_GLIBCXX_ASSERTIONS): Define to 1 not empty.
* include/parallel/compiletime_settings.h (_GLIBCXX_ASSERTIONS):
Rename to _GLIBCXX_PARALLEL_ASSERTIONS and make default value depend
on _GLIBCXX_ASSERTIONS.
* include/parallel/balanced_quicksort.h: Rename _GLIBCXX_ASSERTIONS.
Include <unistd.h> for sleep.
* include/parallel/losertree.h: Rename _GLIBCXX_ASSERTIONS.
* include/parallel/merge.h: Likewise.
* include/parallel/multiway_merge.h: Likewise.
* include/parallel/partition.h: Likewise.
* include/parallel/queue.h: Likewise.
* include/parallel/sort.h: Likewise.
* testsuite/25_algorithms/headers/algorithm/
parallel_algorithm_assert.cc: New.
-------------- next part --------------
commit 530690e778b4257f6e52ef1199d536dbd392e4ba
Author: redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed Jul 13 17:22:57 2016 +0000
libstdc++/71856 Define _GLIBCXX_PARALLEL_ASSERTIONS
PR libstdc++/71856
* include/bits/c++config (_GLIBCXX_ASSERTIONS): Define to 1 not empty.
* include/parallel/compiletime_settings.h (_GLIBCXX_ASSERTIONS):
Rename to _GLIBCXX_PARALLEL_ASSERTIONS and make default value depend
on _GLIBCXX_ASSERTIONS.
* include/parallel/balanced_quicksort.h: Rename _GLIBCXX_ASSERTIONS.
Include <unistd.h> for sleep.
* include/parallel/losertree.h: Rename _GLIBCXX_ASSERTIONS.
* include/parallel/merge.h: Likewise.
* include/parallel/multiway_merge.h: Likewise.
* include/parallel/partition.h: Likewise.
* include/parallel/queue.h: Likewise.
* include/parallel/sort.h: Likewise.
* testsuite/25_algorithms/headers/algorithm/
parallel_algorithm_assert.cc: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@238307 138bc75d-0d04-0410-961f-82ee72b054a4
diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config
index 57024e4..4625607 100644
--- a/libstdc++-v3/include/bits/c++config
+++ b/libstdc++-v3/include/bits/c++config
@@ -414,7 +414,7 @@ namespace std
// Debug Mode implies checking assertions.
#ifdef _GLIBCXX_DEBUG
-# define _GLIBCXX_ASSERTIONS
+# define _GLIBCXX_ASSERTIONS 1
#endif
// Disable std::string explicit instantiation declarations in order to assert.
diff --git a/libstdc++-v3/include/parallel/balanced_quicksort.h b/libstdc++-v3/include/parallel/balanced_quicksort.h
index 65dec30..9d09ed2 100644
--- a/libstdc++-v3/include/parallel/balanced_quicksort.h
+++ b/libstdc++-v3/include/parallel/balanced_quicksort.h
@@ -51,8 +51,11 @@
#include <parallel/random_number.h>
#include <parallel/queue.h>
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
#include <parallel/checkers.h>
+#ifdef _GLIBCXX_HAVE_UNISTD_H
+#include <unistd.h>
+#endif
#endif
namespace __gnu_parallel
@@ -110,7 +113,7 @@ namespace __gnu_parallel
__median_of_three_iterators(__begin, __begin + (__end - __begin) / 2,
__end - 1, __comp);
-#if defined(_GLIBCXX_ASSERTIONS)
+#if defined(_GLIBCXX_PARALLEL_ASSERTIONS)
// Must be in between somewhere.
_DifferenceType __n = __end - __begin;
@@ -147,7 +150,7 @@ namespace __gnu_parallel
std::iter_swap(__begin + __split_pos, __pivot_pos);
__pivot_pos = __begin + __split_pos;
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
_RAIter __r;
for (__r = __begin; __r != __pivot_pos; ++__r)
_GLIBCXX_PARALLEL_ASSERT(__comp(*__r, *__pivot_pos));
@@ -194,7 +197,7 @@ namespace __gnu_parallel
_DifferenceType __split_pos =
__qsb_divide(__begin, __end, __comp, __num_threads);
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
_GLIBCXX_PARALLEL_ASSERT(0 <= __split_pos &&
__split_pos < (__end - __begin));
#endif
@@ -267,7 +270,7 @@ namespace __gnu_parallel
_Piece __current = __tl._M_initial;
_DifferenceType __elements_done = 0;
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
_DifferenceType __total_elements_done = 0;
#endif
@@ -297,7 +300,7 @@ namespace __gnu_parallel
__pred);
// Left side: < __pivot_pos; __right side: >= __pivot_pos.
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
_GLIBCXX_PARALLEL_ASSERT(__begin <= __split_pos1
&& __split_pos1 < __end);
#endif
@@ -328,7 +331,7 @@ namespace __gnu_parallel
// Elements equal to pivot are done.
__elements_done += (__split_pos2 - __split_pos1);
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
__total_elements_done += (__split_pos2 - __split_pos1);
#endif
// Always push larger part onto stack.
@@ -359,7 +362,7 @@ namespace __gnu_parallel
{
__gnu_sequential::sort(__begin, __end, __comp);
__elements_done += __n;
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
__total_elements_done += __n;
#endif
@@ -372,7 +375,7 @@ namespace __gnu_parallel
__elements_done = 0;
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
double __search_start = omp_get_wtime();
#endif
@@ -380,7 +383,7 @@ namespace __gnu_parallel
bool __successfully_stolen = false;
while (__wait && *__tl._M_elements_leftover > 0
&& !__successfully_stolen
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
// Possible dead-lock.
&& (omp_get_wtime() < (__search_start + 1.0))
#endif
@@ -399,7 +402,7 @@ namespace __gnu_parallel
#endif
}
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
if (omp_get_wtime() >= (__search_start + 1.0))
{
sleep(1);
@@ -409,7 +412,7 @@ namespace __gnu_parallel
#endif
if (!__successfully_stolen)
{
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
_GLIBCXX_PARALLEL_ASSERT(*__tl._M_elements_leftover == 0);
#endif
return;
@@ -475,7 +478,7 @@ namespace __gnu_parallel
__qsb_conquer(__tls, __begin, __begin + __n, __comp, 0,
__num_threads, true);
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
// All stack must be empty.
_Piece __dummy;
for (_ThreadIndex __i = 1; __i < __num_threads; ++__i)
diff --git a/libstdc++-v3/include/parallel/compiletime_settings.h b/libstdc++-v3/include/parallel/compiletime_settings.h
index f4fb404..47f0a59 100644
--- a/libstdc++-v3/include/parallel/compiletime_settings.h
+++ b/libstdc++-v3/include/parallel/compiletime_settings.h
@@ -55,10 +55,10 @@
#define _GLIBCXX_SCALE_DOWN_FPU 0
#endif
-#ifndef _GLIBCXX_ASSERTIONS
+#ifndef _GLIBCXX_PARALLEL_ASSERTIONS
/** @brief Switch on many _GLIBCXX_PARALLEL_ASSERTions in parallel code.
* Should be switched on only locally. */
-#define _GLIBCXX_ASSERTIONS 0
+#define _GLIBCXX_PARALLEL_ASSERTIONS (_GLIBCXX_ASSERTIONS+0)
#endif
#ifndef _GLIBCXX_RANDOM_SHUFFLE_CONSIDER_L1
diff --git a/libstdc++-v3/include/parallel/losertree.h b/libstdc++-v3/include/parallel/losertree.h
index 7b4bb44..f1ee128 100644
--- a/libstdc++-v3/include/parallel/losertree.h
+++ b/libstdc++-v3/include/parallel/losertree.h
@@ -222,7 +222,7 @@ namespace __gnu_parallel
__delete_min_insert(_Tp __key, bool __sup)
{
using std::swap;
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
// no dummy sequence can ever be at the top!
_GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
#endif
@@ -324,7 +324,7 @@ namespace __gnu_parallel
__delete_min_insert(_Tp __key, bool __sup)
{
using std::swap;
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
// no dummy sequence can ever be at the top!
_GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
#endif
@@ -451,7 +451,7 @@ namespace __gnu_parallel
void __delete_min_insert(const _Tp& __key, bool __sup)
{
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
// no dummy sequence can ever be at the top!
_GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
#endif
@@ -533,7 +533,7 @@ namespace __gnu_parallel
void __delete_min_insert(const _Tp& __key, bool __sup)
{
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
// no dummy sequence can ever be at the top!
_GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
#endif
@@ -620,7 +620,7 @@ namespace __gnu_parallel
int
__get_min_source()
{
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
// no dummy sequence can ever be at the top!
_GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
#endif
@@ -687,7 +687,7 @@ namespace __gnu_parallel
{
_M_losers[0] = _M_losers[__init_winner(1)];
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
// no dummy sequence can ever be at the top at the beginning
// (0 sequences!)
_GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
@@ -700,7 +700,7 @@ namespace __gnu_parallel
__delete_min_insert(_Tp __key, bool)
{
using std::swap;
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
// no dummy sequence can ever be at the top!
_GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
#endif
@@ -755,7 +755,7 @@ namespace __gnu_parallel
unsigned int __left = __init_winner(2 * __root);
unsigned int __right = __init_winner(2 * __root + 1);
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
// If __left one is sentinel then __right one must be, too.
if (_M_losers[__left]._M_source == -1)
_GLIBCXX_PARALLEL_ASSERT(_M_losers[__right]._M_source == -1);
@@ -782,7 +782,7 @@ namespace __gnu_parallel
{
_M_losers[0] = _M_losers[__init_winner(1)];
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
// no dummy sequence can ever be at the top at the beginning
// (0 sequences!)
_GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
@@ -795,7 +795,7 @@ namespace __gnu_parallel
__delete_min_insert(_Tp __key, bool)
{
using std::swap;
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
// no dummy sequence can ever be at the top!
_GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
#endif
@@ -865,7 +865,7 @@ namespace __gnu_parallel
int
__get_min_source()
{
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
// no dummy sequence can ever be at the top!
_GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
#endif
@@ -932,7 +932,7 @@ namespace __gnu_parallel
{
_M_losers[0] = _M_losers[__init_winner(1)];
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
// no dummy sequence can ever be at the top at the beginning
// (0 sequences!)
_GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
@@ -942,7 +942,7 @@ namespace __gnu_parallel
void
__delete_min_insert(const _Tp& __key, bool __sup)
{
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
// no dummy sequence can ever be at the top!
_GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
#endif
@@ -998,7 +998,7 @@ namespace __gnu_parallel
unsigned int __left = __init_winner(2 * __root);
unsigned int __right = __init_winner(2 * __root + 1);
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
// If __left one is sentinel then __right one must be, too.
if (_M_losers[__left]._M_source == -1)
_GLIBCXX_PARALLEL_ASSERT(_M_losers[__right]._M_source == -1);
@@ -1025,7 +1025,7 @@ namespace __gnu_parallel
{
_M_losers[0] = _M_losers[__init_winner(1)];
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
// no dummy sequence can ever be at the top at the beginning
// (0 sequences!)
_GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
@@ -1035,7 +1035,7 @@ namespace __gnu_parallel
void
__delete_min_insert(const _Tp& __key, bool __sup)
{
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
// no dummy sequence can ever be at the top!
_GLIBCXX_PARALLEL_ASSERT(_M_losers[0]._M_source != -1);
#endif
diff --git a/libstdc++-v3/include/parallel/merge.h b/libstdc++-v3/include/parallel/merge.h
index c240a52..717054f 100644
--- a/libstdc++-v3/include/parallel/merge.h
+++ b/libstdc++-v3/include/parallel/merge.h
@@ -113,7 +113,7 @@ namespace __gnu_parallel
typedef typename std::iterator_traits<_RAIter2>::value_type
_ValueType2;
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
_GLIBCXX_PARALLEL_ASSERT(__max_length >= 0);
#endif
diff --git a/libstdc++-v3/include/parallel/multiway_merge.h b/libstdc++-v3/include/parallel/multiway_merge.h
index bb7b218..9e9fdf8 100644
--- a/libstdc++-v3/include/parallel/multiway_merge.h
+++ b/libstdc++-v3/include/parallel/multiway_merge.h
@@ -46,7 +46,7 @@
#include <parallel/parallel.h>
#include <parallel/losertree.h>
#include <parallel/multiseq_selection.h>
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
#include <parallel/checkers.h>
#endif
@@ -256,7 +256,7 @@ namespace __gnu_parallel
if (__length == 0)
return __target;
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
_DifferenceTp __orig_length = __length;
#endif
@@ -310,7 +310,7 @@ namespace __gnu_parallel
__finish:
;
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
_GLIBCXX_PARALLEL_ASSERT(
((_RAIter1)__seq0 - __seqs_begin[0].first) +
((_RAIter1)__seq1 - __seqs_begin[1].first) +
@@ -597,7 +597,7 @@ namespace __gnu_parallel
for (_SeqNumber __t = 0; __t < __k; ++__t)
{
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
_GLIBCXX_PARALLEL_ASSERT(__seqs_begin[__t].first
!= __seqs_begin[__t].second);
#endif
@@ -608,7 +608,7 @@ namespace __gnu_parallel
_SeqNumber __source;
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
_DifferenceType __i = 0;
#endif
@@ -618,7 +618,7 @@ namespace __gnu_parallel
// Take out.
__source = __lt.__get_min_source();
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
_GLIBCXX_PARALLEL_ASSERT(0 <= __source && __source < __k);
_GLIBCXX_PARALLEL_ASSERT(__i == 0
|| !__comp(*(__seqs_begin[__source].first), *(__target - 1)));
@@ -627,7 +627,7 @@ namespace __gnu_parallel
// Feed.
*(__target++) = *(__seqs_begin[__source].first++);
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
++__i;
#endif
// Replace from same __source.
@@ -690,7 +690,7 @@ namespace __gnu_parallel
__target_end = multiway_merge_loser_tree_unguarded<UnguardedLoserTree>
(__seqs_begin, __seqs_end, __target, __sentinel, __length, __comp);
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
_GLIBCXX_PARALLEL_ASSERT(__target_end == __target + __length);
_GLIBCXX_PARALLEL_ASSERT(__is_sorted(__target, __target_end, __comp));
#endif
@@ -936,7 +936,7 @@ namespace __gnu_parallel
typedef typename std::iterator_traits<_RAIter1>::value_type
_ValueType;
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
for (_RAIterIterator __s = __seqs_begin; __s != __seqs_end; ++__s)
{
_GLIBCXX_PARALLEL_ASSERT(__is_sorted((*__s).first,
@@ -990,7 +990,7 @@ namespace __gnu_parallel
(__seqs_begin, __seqs_end, __target, __sentinel, __length, __comp);
break;
}
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
_GLIBCXX_PARALLEL_ASSERT(
__is_sorted(__target, __target + __length, __comp));
#endif
@@ -1230,7 +1230,7 @@ namespace __gnu_parallel
_Compare __comp,
_ThreadIndex __num_threads)
{
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
_GLIBCXX_PARALLEL_ASSERT(__seqs_end - __seqs_begin > 1);
#endif
@@ -1318,7 +1318,7 @@ namespace __gnu_parallel
delete[] __chunks;
} // parallel
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
_GLIBCXX_PARALLEL_ASSERT(
__is_sorted(__target, __target + __length, __comp));
#endif
diff --git a/libstdc++-v3/include/parallel/partition.h b/libstdc++-v3/include/parallel/partition.h
index d3ca65b..16dadf5 100644
--- a/libstdc++-v3/include/parallel/partition.h
+++ b/libstdc++-v3/include/parallel/partition.h
@@ -234,7 +234,7 @@ namespace __gnu_parallel
break;
}
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
_GLIBCXX_PARALLEL_ASSERT(__swapstart != -1);
#endif
@@ -257,7 +257,7 @@ namespace __gnu_parallel
break;
}
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
_GLIBCXX_PARALLEL_ASSERT(__swapstart != -1);
#endif
@@ -265,7 +265,7 @@ namespace __gnu_parallel
__begin + __thread_right_border
+ __chunk_size, __begin + __swapstart);
}
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
# pragma omp barrier
# pragma omp single
diff --git a/libstdc++-v3/include/parallel/queue.h b/libstdc++-v3/include/parallel/queue.h
index 46fd4bf..cb525c2 100644
--- a/libstdc++-v3/include/parallel/queue.h
+++ b/libstdc++-v3/include/parallel/queue.h
@@ -86,7 +86,7 @@ namespace __gnu_parallel
int __former_front, __former_back;
__decode2(__former_borders, __former_front, __former_back);
*(_M_base + __former_front % _M_max_size) = __t;
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
// Otherwise: front - back > _M_max_size eventually.
_GLIBCXX_PARALLEL_ASSERT(((__former_front + 1) - __former_back)
<= _M_max_size);
diff --git a/libstdc++-v3/include/parallel/sort.h b/libstdc++-v3/include/parallel/sort.h
index 16a7925..12cef0d 100644
--- a/libstdc++-v3/include/parallel/sort.h
+++ b/libstdc++-v3/include/parallel/sort.h
@@ -36,7 +36,7 @@
#include <parallel/features.h>
#include <parallel/parallel.h>
-#if _GLIBCXX_ASSERTIONS
+#if _GLIBCXX_PARALLEL_ASSERTIONS
#include <parallel/checkers.h>
#endif
diff --git a/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_assert.cc b/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_assert.cc
new file mode 100644
index 0000000..b9a6016
--- /dev/null
+++ b/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_assert.cc
@@ -0,0 +1,28 @@
+// { dg-do compile }
+// { dg-require-parallel-mode "" }
+// { dg-options "-fopenmp" { target *-*-* } }
+
+// Copyright (C) 2016 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/>.
+
+#ifndef _GLIBCXX_ASSERTIONS
+# define _GLIBCXX_ASSERTIONS 1
+#endif
+#include <parallel/algorithm>
+#ifndef _GLIBCXX_PARALLEL_ASSERTIONS
+# error "_GLIBCXX_ASSERTIONS does not enable _GLIBCXX_PARALLEL_ASSERTIONS"
+#endif
More information about the Libstdc++
mailing list