mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 14:59:39 +02:00
Implements the OpenMP 5.2 C and C++ deprecations. Uses the warning established in patch 1/4, -Wdeprecated-openmp, for said deprecations. Not implemented is 'uses_allocators', since the base is not yet in mainline, along with the relaxing of constraints for the interop construct, since this is not a deprecation. Additionally does not deprecate 'destroy' with no arguments on depobj construct, since this was undeprecated in OpenMP 6.0. Adds new tests. gcc/c/ChangeLog: * c-parser.cc (c_parser_omp_clause_reduction): Deprecate '-' operator for reductions. (c_parser_omp_clause_linear): Deprecate modifiers with parens. (c_parser_omp_clause_depend): Deprecate 'sink' and 'source' modifiers for 'depend' clause. (c_parser_omp_clause_map): Map clause modifiers comma-separated. (c_parser_omp_declare_target): Deprecate synonymous omp declare target for omp begin declare target. Deprecate 'to' clause. (c_parser_omp_metadirective): Deprecate default clause on metadirectives. gcc/cp/ChangeLog: * parser.cc (cp_parser_omp_clause_reduction): Deprecate '-' operator. (cp_parser_omp_clause_linear): Deprecate modifiers with parens. (cp_parser_omp_clause_depend): Deprecate sink and source. (cp_parser_omp_clause_map): Map clause modifiers comma-separated. (cp_parser_omp_declare_target): Deprecate synonymous omp declare target for omp begin declare target. Deprecate to clause. (cp_parser_omp_metadirective): Deprecate default clause on metadirectives. libgomp/ChangeLog: * testsuite/libgomp.c++/declare_target-1.C: Suppress warnings. * testsuite/libgomp.c++/depobj-1.C: Ditto. * testsuite/libgomp.c++/doacross-1.C: Ditto. * testsuite/libgomp.c++/for-15.C: Ditto. * testsuite/libgomp.c++/for-24.C: Ditto. * testsuite/libgomp.c++/pr101544-1-O0.C: Ditto. * testsuite/libgomp.c++/pr101544-1.C: Ditto. * testsuite/libgomp.c++/pr96835-1-O0.C: Ditto. * testsuite/libgomp.c++/pr96835-1.C: Ditto. * testsuite/libgomp.c++/static-aggr-constructor-destructor-1.C: Ditto. * testsuite/libgomp.c++/static-aggr-constructor-destructor-2.C: Ditto. * testsuite/libgomp.c++/static-aggr-constructor-destructor-3.C: Ditto. * testsuite/libgomp.c++/target-13.C: Ditto. * testsuite/libgomp.c++/target-cdtor-1.C: Ditto. * testsuite/libgomp.c++/target-cdtor-2.C: Ditto. * testsuite/libgomp.c++/target-std__array-concurrent-usm.C: Ditto. * testsuite/libgomp.c++/target-std__array-concurrent.C: Ditto. * testsuite/libgomp.c++/target-std__cmath.C: Ditto. * testsuite/libgomp.c++/target-std__complex.C: Ditto. * testsuite/libgomp.c++/target-std__deque-concurrent-usm.C: Ditto. * testsuite/libgomp.c++/target-std__deque-concurrent.C: Ditto. * testsuite/libgomp.c++/target-std__forward_list-concurrent-usm.C: Ditto. * testsuite/libgomp.c++/target-std__forward_list-concurrent.C: Ditto. * testsuite/libgomp.c++/target-std__list-concurrent-usm.C: Ditto. * testsuite/libgomp.c++/target-std__list-concurrent.C: Ditto. * testsuite/libgomp.c++/target-std__numbers.C: Ditto. * testsuite/libgomp.c++/target-std__span-concurrent-usm.C: Ditto. * testsuite/libgomp.c++/target-std__span-concurrent.C: Ditto. * testsuite/libgomp.c++/target-std__valarray-1.C: Ditto. * testsuite/libgomp.c++/target-std__valarray-concurrent-usm.C: Ditto. * testsuite/libgomp.c++/target-std__valarray-concurrent.C: Ditto. * testsuite/libgomp.c++/target-std__vector-concurrent-usm.C: Ditto. * testsuite/libgomp.c++/target-std__vector-concurrent.C: Ditto. * testsuite/libgomp.c-c++-common/declare_target-1.c: Ditto. * testsuite/libgomp.c-c++-common/depend-2.c: Ditto. * testsuite/libgomp.c-c++-common/depobj-1.c: Ditto. * testsuite/libgomp.c-c++-common/for-11.c: Ditto. * testsuite/libgomp.c-c++-common/for-12.c: Ditto. * testsuite/libgomp.c-c++-common/for-16.c: Ditto. * testsuite/libgomp.c-c++-common/for-3.c: Ditto. * testsuite/libgomp.c-c++-common/for-5.c: Ditto. * testsuite/libgomp.c-c++-common/for-6.c: Ditto. * testsuite/libgomp.c-c++-common/for-9.c: Ditto. * testsuite/libgomp.c-c++-common/function-not-offloaded.c: Ditto. * testsuite/libgomp.c-c++-common/metadirective-1.c: Ditto. * testsuite/libgomp.c-c++-common/metadirective-2.c: Ditto. * testsuite/libgomp.c-c++-common/metadirective-3.c: Ditto. * testsuite/libgomp.c-c++-common/metadirective-5.c: Ditto. * testsuite/libgomp.c-c++-common/monotonic-1.c: Ditto. * testsuite/libgomp.c-c++-common/monotonic-2.c: Ditto. * testsuite/libgomp.c-c++-common/pr100059-1.c: Ditto. * testsuite/libgomp.c-c++-common/pr66199-2.c: Ditto. * testsuite/libgomp.c-c++-common/pr66199-4.c: Ditto. * testsuite/libgomp.c-c++-common/pr66199-5.c: Ditto. * testsuite/libgomp.c-c++-common/pr66199-6.c: Ditto. * testsuite/libgomp.c-c++-common/pr66199-7.c: Ditto. * testsuite/libgomp.c-c++-common/pr66199-8.c: Ditto. * testsuite/libgomp.c-c++-common/pr66199-9.c: Ditto. * testsuite/libgomp.c-c++-common/ptr-attach-1.c: Ditto. * testsuite/libgomp.c-c++-common/reverse-offload-1.c: Ditto. * testsuite/libgomp.c-c++-common/target-1.c: Ditto. * testsuite/libgomp.c-c++-common/target-10.c: Ditto. * testsuite/libgomp.c-c++-common/target-40.c: Ditto. * testsuite/libgomp.c-c++-common/target-abi-struct-1-O0.c: Ditto. * testsuite/libgomp.c-c++-common/target-abi-struct-1.c: Ditto. * testsuite/libgomp.c-c++-common/target-cdtor-1.c: Ditto. * testsuite/libgomp.c-c++-common/target-same-name-1.c: Ditto. * testsuite/libgomp.c-c++-common/task-reduction-14.c: Ditto. * testsuite/libgomp.c-c++-common/variable-not-offloaded.c: Ditto. * testsuite/libgomp.c/declare-variant-3.c: Ditto. * testsuite/libgomp.c/declare-variant-4.c: Ditto. * testsuite/libgomp.c/doacross-1.c: Ditto. * testsuite/libgomp.c/doacross-2.c: Ditto. * testsuite/libgomp.c/doacross-3.c: Ditto. * testsuite/libgomp.c/examples-4/async_target-1.c: Ditto. * testsuite/libgomp.c/examples-4/declare_target-1.c: Ditto. * testsuite/libgomp.c/examples-4/declare_target-3.c: Ditto. * testsuite/libgomp.c/examples-4/declare_target-4.c: Ditto. * testsuite/libgomp.c/examples-4/declare_target-5.c: Ditto. * testsuite/libgomp.c/max_vf-1.c: Ditto. * testsuite/libgomp.c/pr81778.c: Ditto. * testsuite/libgomp.c/pr86660.c: Ditto. * testsuite/libgomp.c/reduction-4.c: Ditto. * testsuite/libgomp.c/switch-conversion.c: Ditto. * testsuite/libgomp.c/target-26.c: Ditto. * testsuite/libgomp.c/target-28.c: Ditto. * testsuite/libgomp.c/target-30.c: Ditto. * testsuite/libgomp.c/target-32.c: Ditto. * testsuite/libgomp.c/target-35.c: Ditto. * testsuite/libgomp.c/target-38.c: Ditto. * testsuite/libgomp.c/target-39.c: Ditto. * testsuite/libgomp.c/target-9.c: Ditto. * testsuite/libgomp.c/target-link-1.c: Ditto. * testsuite/libgomp.c/target-teams-1.c: Ditto. * testsuite/libgomp.c/thread-limit-2.c: Ditto. * testsuite/libgomp.oacc-c-c++-common/vred2d-128.c: Ditto. gcc/testsuite/ChangeLog: * c-c++-common/gomp/Wparentheses-2.c: Suppress warnings. * c-c++-common/gomp/attrs-metadirective-1.c: Ditto. * c-c++-common/gomp/attrs-metadirective-2.c: Ditto. * c-c++-common/gomp/attrs-metadirective-3.c: Ditto. * c-c++-common/gomp/attrs-metadirective-4.c: Ditto. * c-c++-common/gomp/attrs-metadirective-5.c: Ditto. * c-c++-common/gomp/attrs-metadirective-8.c: Ditto. * c-c++-common/gomp/begin-declare-target-1.c: Ditto. * c-c++-common/gomp/begin-declare-target-2.c: Ditto. * c-c++-common/gomp/clauses-3.c: Ditto. * c-c++-common/gomp/declare-target-1.c: Ditto. * c-c++-common/gomp/declare-target-2.c: Ditto. * c-c++-common/gomp/declare-target-3.c: Ditto. * c-c++-common/gomp/declare-target-4.c: Ditto. * c-c++-common/gomp/declare-target-5.c: Ditto. * c-c++-common/gomp/declare-target-7.c: Ditto. * c-c++-common/gomp/declare-target-indirect-1.c: Ditto. * c-c++-common/gomp/declare-target-indirect-2.c: Ditto. * c-c++-common/gomp/declare-variant-10.c: Ditto. * c-c++-common/gomp/declare-variant-8.c: Ditto. * c-c++-common/gomp/defaultmap-2.c: Ditto. * c-c++-common/gomp/defaultmap-3.c: Ditto. * c-c++-common/gomp/depend-iterator-2.c: Ditto. * c-c++-common/gomp/depobj-1.c: Ditto. * c-c++-common/gomp/directive-1.c: Ditto. * c-c++-common/gomp/distribute-1.c: Ditto. * c-c++-common/gomp/doacross-1.c: Ditto. * c-c++-common/gomp/doacross-2.c: Ditto. * c-c++-common/gomp/doacross-3.c: Ditto. * c-c++-common/gomp/doacross-4.c: Ditto. * c-c++-common/gomp/doacross-8.c: Ditto. * c-c++-common/gomp/linear-1.c: Ditto. * c-c++-common/gomp/linear-2.c: Ditto. * c-c++-common/gomp/linear-3.c: Ditto. * c-c++-common/gomp/loop-6.c: Ditto. * c-c++-common/gomp/map-1.c: Ditto. * c-c++-common/gomp/map-3.c: Ditto. * c-c++-common/gomp/map-6.c: Ditto. * c-c++-common/gomp/metadirective-1.c: Ditto. * c-c++-common/gomp/metadirective-2.c: Ditto. * c-c++-common/gomp/metadirective-3.c: Ditto. * c-c++-common/gomp/metadirective-4.c: Ditto. * c-c++-common/gomp/metadirective-5.c: Ditto. * c-c++-common/gomp/metadirective-8.c: Ditto. * c-c++-common/gomp/metadirective-construct.c: Ditto. * c-c++-common/gomp/metadirective-device.c: Ditto. * c-c++-common/gomp/metadirective-target-device-1.c: Ditto. * c-c++-common/gomp/metadirective-target-device-2.c: Ditto. * c-c++-common/gomp/order-2.c: Ditto. * c-c++-common/gomp/ordered-3.c: Ditto. * c-c++-common/gomp/ordered-5.c: Ditto. * c-c++-common/gomp/pr102640.c: Ditto. * c-c++-common/gomp/pr106836.c: Ditto. * c-c++-common/gomp/pr120180-1.c: Ditto. * c-c++-common/gomp/pr88203-1.c: Ditto. * c-c++-common/gomp/pr88203-2.c: Ditto. * c-c++-common/gomp/pr88203-3.c: Ditto. * c-c++-common/gomp/pr91401-2.c: Ditto. * c-c++-common/gomp/pr91987.c: Ditto. * c-c++-common/gomp/reverse-offload-1.c: Ditto. * c-c++-common/gomp/schedule-modifiers-1.c: Ditto. * c-c++-common/gomp/sink-1.c: Ditto. * c-c++-common/gomp/sink-2.c: Ditto. * c-c++-common/gomp/sink-3.c: Ditto. * c-c++-common/gomp/sink-4.c: Ditto. * c-c++-common/gomp/sink-5.c: Ditto. * c-c++-common/gomp/target-teams-1.c: Ditto. * g++.dg/gomp/attrs-12.C: Ditto. * g++.dg/gomp/attrs-5.C: Ditto. * g++.dg/gomp/attrs-9.C: Ditto. * g++.dg/gomp/clause-3.C: Ditto. * g++.dg/gomp/declare-simd-3.C: Ditto. * g++.dg/gomp/declare-simd-4.C: Ditto. * g++.dg/gomp/declare-simd-6.C: Ditto. * g++.dg/gomp/declare-simd-7.C: Ditto. * g++.dg/gomp/declare-simd-8.C: Ditto. * g++.dg/gomp/declare-target-1.C: Ditto. * g++.dg/gomp/declare-target-2.C: Ditto. * g++.dg/gomp/declare-target-3.C: Ditto. * g++.dg/gomp/declare-target-indirect-1.C: Ditto. * g++.dg/gomp/depend-iterator-2.C: Ditto. * g++.dg/gomp/depobj-1.C: Ditto. * g++.dg/gomp/doacross-2.C: Ditto. * g++.dg/gomp/linear-1.C: Ditto. * g++.dg/gomp/linear-2.C: Ditto. * g++.dg/gomp/linear-3.C: Ditto. * g++.dg/gomp/linear-5.C: Ditto. * g++.dg/gomp/map-1.C: Ditto. * g++.dg/gomp/pr118876.C: Ditto. * g++.dg/gomp/pr119370.C: Ditto. * g++.dg/gomp/sink-1.C: Ditto. * g++.dg/gomp/sink-2.C: Ditto. * g++.dg/gomp/sink-3.C: Ditto. * g++.dg/gomp/target-simd-clone-1.C: Ditto. * g++.dg/gomp/target-simd-clone-2.C: Ditto. * g++.dg/gomp/target-teams-1.C: Ditto. * g++.dg/gomp/udr-5.C: Ditto. * gcc.dg/gomp/attrs-12.c: Ditto. * gcc.dg/gomp/attrs-5.c: Ditto. * gcc.dg/gomp/attrs-9.c: Ditto. * gcc.dg/gomp/clause-1.c: Ditto. * gcc.dg/gomp/declare-simd-3.c: Ditto. * gcc.dg/gomp/linear-1.c: Ditto. * gcc.dg/gomp/metadirective-1.c: Ditto. * gcc.dg/gomp/pr104757.c: Ditto. * gcc.dg/gomp/sink-fold-1.c: Ditto. * gcc.dg/gomp/sink-fold-2.c: Ditto. * gcc.dg/gomp/sink-fold-3.c: Ditto. * gcc.dg/gomp/target-simd-clone-1.c: Ditto. * gcc.dg/gomp/target-simd-clone-2.c: Ditto. * gcc.dg/gomp/target-simd-clone-3.c: Ditto. * gcc.dg/gomp/target-simd-clone-4.c: Ditto. * gcc.dg/gomp/target-simd-clone-5.c: Ditto. * gcc.dg/gomp/target-simd-clone-6.c: Ditto. * gcc.dg/gomp/target-simd-clone-7.c: Ditto. * gcc.dg/gomp/target-simd-clone-8.c: Ditto. * gcc.dg/gomp/workshare-reduction-55.c: Ditto. * gcc.dg/gomp/workshare-reduction-56.c: Ditto. * gcc.dg/gomp/workshare-reduction-57.c: Ditto. * gcc.dg/gomp/workshare-reduction-58.c: Ditto. * c-c++-common/gomp/52-deps.c: New test. * g++.dg/gomp/map-csm-dep.C: New test. * gcc.dg/gomp/map-csm-dep.c: New test.
176 lines
5.0 KiB
C
176 lines
5.0 KiB
C
// { dg-do run }
|
|
// { dg-additional-options "-std=c++20" }
|
|
// { dg-additional-options "-Wno-deprecated-openmp" }
|
|
#include <cmath>
|
|
#include <complex>
|
|
#include <numbers>
|
|
|
|
using namespace std::complex_literals;
|
|
|
|
#define FP_EQUAL(x,y) (std::abs ((x) - (y)) < 1E-6)
|
|
#define COMPLEX_EQUAL(x,y) (FP_EQUAL ((x).real (), (y).real ()) \
|
|
&& FP_EQUAL ((x).imag (), (y).imag ()))
|
|
|
|
#pragma omp declare target
|
|
template<typename T> bool test_complex ()
|
|
{
|
|
std::complex<T> z (-1.334, 5.763);
|
|
|
|
if (!FP_EQUAL (z.real (), (T) -1.334))
|
|
return false;
|
|
if (!FP_EQUAL (z.imag (), (T) 5.763))
|
|
return false;
|
|
if (!FP_EQUAL (std::abs (z),
|
|
std::sqrt (z.real () * z.real () + z.imag () * z.imag ())))
|
|
return false;
|
|
if (!FP_EQUAL (std::arg (z), std::atan2 (z.imag (), z.real ())))
|
|
return false;
|
|
if (!FP_EQUAL (std::norm (z), z.real () * z.real () + z.imag () * z.imag ()))
|
|
return false;
|
|
|
|
auto conj = std::conj (z);
|
|
if (!FP_EQUAL (conj.real (), z.real ())
|
|
|| !FP_EQUAL (conj.imag (), -z.imag ()))
|
|
return false;
|
|
|
|
if (std::proj (z) != z)
|
|
return false;
|
|
|
|
auto infz1 = std::proj (std::complex<float> (INFINITY, -1));
|
|
if (infz1.real () != INFINITY || infz1.imag () != (T) -0.0)
|
|
return false;
|
|
auto infz2 = std::proj (std::complex<float> (0, -INFINITY));
|
|
if (infz2.real () != INFINITY || infz2.imag () != (T) -0.0)
|
|
return false;
|
|
|
|
auto polarz = std::polar ((T) 1.5, std::numbers::pi_v<T> / 4);
|
|
if (!FP_EQUAL (polarz.real (), (T) 1.5 * std::cos (std::numbers::pi_v<T> / 4))
|
|
|| !FP_EQUAL (polarz.imag (),
|
|
(T) 1.5* std::sin (std::numbers::pi_v<T> / 4)))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
template<typename T> bool test_complex_exp_log ()
|
|
{
|
|
std::complex<T> z (-1.724, -3.763);
|
|
|
|
// Euler's identity
|
|
auto eulerz = std::exp (std::complex<T> (0, std::numbers::pi));
|
|
eulerz += 1.0;
|
|
if (!COMPLEX_EQUAL (eulerz, std::complex<T> ()))
|
|
return false;
|
|
|
|
auto my_exp_z
|
|
= std::complex<T> (std::exp (z.real ()) * std::cos (z.imag ()),
|
|
std::exp (z.real ()) * std::sin (z.imag ()));
|
|
if (!COMPLEX_EQUAL (std::exp (z), my_exp_z))
|
|
return false;
|
|
|
|
if (!COMPLEX_EQUAL (std::log10 (z),
|
|
std::log (z) / std::log (std::complex<T> (10))))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
template<typename T> bool test_complex_trig ()
|
|
{
|
|
std::complex<T> z (std::numbers::pi / 8, std::numbers::pi / 10);
|
|
const std::complex<T> i (0, 1);
|
|
|
|
auto my_sin_z
|
|
= std::complex<T> (std::sin (z.real ()) * std::cosh (z.imag ()),
|
|
std::cos (z.real ()) * std::sinh (z.imag ()));
|
|
if (!COMPLEX_EQUAL (std::sin (z), my_sin_z))
|
|
return false;
|
|
|
|
auto my_cos_z
|
|
= std::complex<T> (std::cos (z.real ()) * std::cosh (z.imag ()),
|
|
-std::sin (z.real ()) * std::sinh (z.imag ()));
|
|
if (!COMPLEX_EQUAL (std::cos (z), my_cos_z))
|
|
return false;
|
|
|
|
auto my_tan_z
|
|
= std::complex<T> (std::sin (2*z.real ()), std::sinh (2*z.imag ()))
|
|
/ (std::cos (2*z.real ()) + std::cosh (2*z.imag ()));
|
|
if (!COMPLEX_EQUAL (std::tan (z), my_tan_z))
|
|
return false;
|
|
|
|
auto my_sinh_z
|
|
= std::complex<T> (std::sinh (z.real ()) * std::cos (z.imag ()),
|
|
std::cosh (z.real ()) * std::sin (z.imag ()));
|
|
if (!COMPLEX_EQUAL (std::sinh (z), my_sinh_z))
|
|
return false;
|
|
|
|
auto my_cosh_z
|
|
= std::complex<T> (std::cosh (z.real ()) * std::cos (z.imag ()),
|
|
std::sinh (z.real ()) * std::sin (z.imag ()));
|
|
if (!COMPLEX_EQUAL (std::cosh (z), my_cosh_z))
|
|
return false;
|
|
|
|
auto my_tanh_z
|
|
= std::complex<T> (std::sinh (2*z.real ()),
|
|
std::sin (2*z.imag ()))
|
|
/ (std::cosh (2*z.real ()) + std::cos (2*z.imag ()));
|
|
if (!COMPLEX_EQUAL (std::tanh (z), my_tanh_z))
|
|
return false;
|
|
|
|
auto my_asin_z = -i * std::log (i * z + std::sqrt ((T) 1.0 - z*z));
|
|
if (!COMPLEX_EQUAL (std::asin (z), my_asin_z))
|
|
return false;
|
|
|
|
auto my_acos_z
|
|
= std::complex<T> (std::numbers::pi / 2)
|
|
+ i * std::log (i * z + std::sqrt ((T) 1.0 - z*z));
|
|
if (!COMPLEX_EQUAL (std::acos (z), my_acos_z))
|
|
return false;
|
|
|
|
auto my_atan_z = std::complex<T> (0, -0.5) * (std::log ((i - z) / (i + z)));
|
|
if (!COMPLEX_EQUAL (std::atan (z), my_atan_z))
|
|
return false;
|
|
|
|
auto my_asinh_z = std::log (z + std::sqrt (z*z + (T) 1.0));
|
|
if (!COMPLEX_EQUAL (std::asinh (z), my_asinh_z))
|
|
return false;
|
|
|
|
auto my_acosh_z = std::log (z + std::sqrt (z*z - (T) 1.0));
|
|
if (!COMPLEX_EQUAL (std::acosh (z), my_acosh_z))
|
|
return false;
|
|
|
|
auto my_atanh_z
|
|
= std::complex<T> (0.5) * (std::log ((T) 1.0 + z) - std::log ((T) 1.0 - z));
|
|
if (!COMPLEX_EQUAL (std::atanh (z), my_atanh_z))
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
#pragma omp end declare target
|
|
|
|
#define RUN_TEST(func) \
|
|
{ \
|
|
pass++; \
|
|
bool ok = test_##func<float> (); \
|
|
if (!ok) { result = pass; break; } \
|
|
pass++; \
|
|
ok = test_##func<double> (); \
|
|
if (!ok) { result = pass; break; } \
|
|
}
|
|
|
|
int main (void)
|
|
{
|
|
int result = 0;
|
|
|
|
#pragma omp target map (tofrom: result)
|
|
do {
|
|
int pass = 0;
|
|
|
|
RUN_TEST (complex);
|
|
RUN_TEST (complex_exp_log);
|
|
RUN_TEST (complex_trig);
|
|
} while (false);
|
|
|
|
return result;
|
|
}
|