From: Jonathan Wakely Date: Thu, 8 Dec 2016 12:08:14 +0000 (+0000) Subject: PR71856 try to fix Parallel Mode assertions again X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=eae0b895e0f4dce0601e27cc7c54c89be3c480b9;p=gcc.git PR71856 try to fix Parallel Mode assertions again PR libstdc++/71856 * doc/xml/manual/using.xml: Document macro. * include/bits/c++config [_GLIBCXX_DEBUG || _GLIBCXX_PARALLEL] (__glibcxx_assert): Rename to __glibcxx_assert_impl. [_GLIBCXX_DEBUG] (__glibcxx_assert): Expand to __glibcxx_assert_impl. * include/parallel/base.h [_GLIBCXX_PARALLEL_ASSERTIONS] (_GLIBCXX_PARALLEL_ASSERT): Expand to __glibcxx_assert_impl. [!_GLIBCXX_PARALLEL_ASSERTIONS] (_GLIBCXX_PARALLEL_ASSERT): Define as empty. * testsuite/25_algorithms/headers/algorithm/ parallel_algorithm_assert2.cc: New test. From-SVN: r243434 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 15e1aafc2ef..42b02a072ff 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,17 @@ +2016-12-08 Jonathan Wakely + + PR libstdc++/71856 + * doc/xml/manual/using.xml: Document macro. + * include/bits/c++config [_GLIBCXX_DEBUG || _GLIBCXX_PARALLEL] + (__glibcxx_assert): Rename to __glibcxx_assert_impl. + [_GLIBCXX_DEBUG] (__glibcxx_assert): Expand to __glibcxx_assert_impl. + * include/parallel/base.h [_GLIBCXX_PARALLEL_ASSERTIONS] + (_GLIBCXX_PARALLEL_ASSERT): Expand to __glibcxx_assert_impl. + [!_GLIBCXX_PARALLEL_ASSERTIONS] (_GLIBCXX_PARALLEL_ASSERT): Define as + empty. + * testsuite/25_algorithms/headers/algorithm/ + parallel_algorithm_assert2.cc: New test. + 2016-12-08 Jakub Jelinek * testsuite/util/testsuite_new_operators.h: Include testsuite_hooks.h. diff --git a/libstdc++-v3/doc/xml/manual/using.xml b/libstdc++-v3/doc/xml/manual/using.xml index ee76fefa9f8..c06ce16bba4 100644 --- a/libstdc++-v3/doc/xml/manual/using.xml +++ b/libstdc++-v3/doc/xml/manual/using.xml @@ -948,6 +948,15 @@ g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe mode. + _GLIBCXX_PARALLEL_ASSERTIONS + + Undefined by default, but when any parallel mode header is included + this macro will be defined to a non-zero value if + _GLIBCXX_ASSERTIONS has a non-zero value, otherwise to zero. + When defined to a non-zero value, it enables extra error checking and + assertions in the parallel mode. + + _GLIBCXX_PROFILE diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index 8a27d14f951..39e55f42b54 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -434,9 +434,8 @@ namespace std #endif // Assert. -#if !defined(_GLIBCXX_ASSERTIONS) && !defined(_GLIBCXX_PARALLEL) -# define __glibcxx_assert(_Condition) -#else +#if defined(_GLIBCXX_ASSERTIONS) \ + || defined(_GLIBCXX_PARALLEL) || defined(_GLIBCXX_PARALLEL_ASSERTIONS) namespace std { // Avoid the use of assert, because we're trying to keep the @@ -450,7 +449,7 @@ namespace std __builtin_abort(); } } -#define __glibcxx_assert(_Condition) \ +#define __glibcxx_assert_impl(_Condition) \ do \ { \ if (! (_Condition)) \ @@ -459,6 +458,12 @@ namespace std } while (false) #endif +#if defined(_GLIBCXX_ASSERTIONS) +# define __glibcxx_assert(_Condition) __glibcxx_assert_impl(_Condition) +#else +# define __glibcxx_assert(_Condition) +#endif + // Macros for race detectors. // _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(A) and // _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) should be used to explain diff --git a/libstdc++-v3/include/parallel/base.h b/libstdc++-v3/include/parallel/base.h index 7d4b69e7113..721c42d2591 100644 --- a/libstdc++-v3/include/parallel/base.h +++ b/libstdc++-v3/include/parallel/base.h @@ -419,7 +419,11 @@ namespace __gnu_parallel } } -#define _GLIBCXX_PARALLEL_ASSERT(_Condition) __glibcxx_assert(_Condition) +#if _GLIBCXX_PARALLEL_ASSERTIONS && defined(__glibcxx_assert_impl) +#define _GLIBCXX_PARALLEL_ASSERT(_Condition) __glibcxx_assert_impl(_Condition) +#else +#define _GLIBCXX_PARALLEL_ASSERT(_Condition) +#endif } //namespace __gnu_parallel diff --git a/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_assert2.cc b/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_assert2.cc new file mode 100644 index 00000000000..c40985e6377 --- /dev/null +++ b/libstdc++-v3/testsuite/25_algorithms/headers/algorithm/parallel_algorithm_assert2.cc @@ -0,0 +1,50 @@ +// { dg-require-parallel-mode "" } +// { dg-options "-fopenmp -D_GLIBCXX_PARALLEL" { target *-*-* } } +// { dg-do run } + +// 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 +// . + +#undef _GLIBCXX_DEBUG +#undef _GLIBCXX_ASSERTIONS +#undef _GLIBCXX_PARALLEL_ASSERTIONS +#define _GLIBCXX_PARALLEL_ASSERTIONS 1 +#include +#include + +void +test01() +{ + // This should not be enabled without _GLIBCXX_ASSERTIONS: + __glibcxx_assert(false); +} + +void +test02() +{ + bool result = false; + + // This should be enabled by _GLIBCXX_PARALLEL_ASSERTIONS: + _GLIBCXX_PARALLEL_ASSERT(result = true); + VERIFY(result); +} + +int main() +{ + test01(); + test02(); +}