From: Jakub Jelinek Date: Thu, 11 Dec 2025 20:29:32 +0000 (+0100) Subject: openmp: Limit - reduction -Wdeprecated-openmp diagnostics to OpenMP, testsuite fixes... X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9c119b0fdd9ba5a6821c0b4c5874ade8f4969109;p=thirdparty%2Fgcc.git openmp: Limit - reduction -Wdeprecated-openmp diagnostics to OpenMP, testsuite fixes [PR123098] The recent -Wdeprecated-openmp changes broke various tests. This patch limits the - reduction diagnostics to OpenMP, as the code is used by OpenACC and even if OpenACC deprecates it, it should be changed independently and not mention OpenMP versions in that case. The rest are just testsuite tweaks to make stuff pass, sometimes adding -Wno-deprecated-openmp, in other cases using newer syntax. 2025-12-11 Jakub Jelinek PR testsuite/123098 gcc/c/ * c-parser.cc (c_parser_omp_clause_reduction): Only emit -Wdeprecated-openmp warning for CPP_MINUS if is_omp. gcc/cp/ * parser.cc (cp_parser_omp_clause_reduction): Only emit -Wdeprecated-openmp warning for CPP_MINUS if is_omp. gcc/fortran/ * openmp.cc (gfc_match_omp_clause_reduction): Only emit -Wdeprecated-openmp warning for '-' if !openacc. gcc/testsuite/ * gcc.dg/vect/vect-simd-clone-15.c (foo): Use OpenMP 5.2 syntax for linear clause. * g++.dg/vect/simd-clone-6.cc (foo): Likewise. * c-c++-common/goacc-gomp/pr93465-1.c: Use #pragma omp begin declare target instead of #pragma omp declare target. * c-c++-common/goacc-gomp/nesting-fail-1.c: Use #pragma omp masked instead of #pragma omp master. * gfortran.dg/goacc-gomp/pr102330-1.f90 (r1): Use !$omp masked taskloop simd instead of !$omp master taskloop simd. * gfortran.dg/vect/pr86421.f90 (foo): Use OpenMP 5.2 syntax for linear clause. * gfortran.dg/gomp/allocate-16.f90: Use \\\$ instead of $ in dg-error and use relative line numbers instead of absolute. * gfortran.dg/gomp/groupprivate-2.f90: Add -Wno-deprecated-openmp to dg-additional-options. * gfortran.dg/gomp/groupprivate-5.f90: Likewise. * gfortran.dg/goacc/pr93329.f90: Likewise. --- diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc index 284059f5ec0b..abe024c84b39 100644 --- a/gcc/c/c-parser.cc +++ b/gcc/c/c-parser.cc @@ -18849,10 +18849,11 @@ c_parser_omp_clause_reduction (c_parser *parser, enum omp_clause_code kind, code = MULT_EXPR; break; case CPP_MINUS: - warning_at (c_parser_peek_token (parser)->location, - OPT_Wdeprecated_openmp, - "%<-%> operator for reductions deprecated in " - "OpenMP 5.2"); + if (is_omp) + warning_at (c_parser_peek_token (parser)->location, + OPT_Wdeprecated_openmp, + "%<-%> operator for reductions deprecated in " + "OpenMP 5.2"); code = MINUS_EXPR; break; case CPP_AND: diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index d9a4b6e1a0c8..50a03a3d7973 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -42165,9 +42165,10 @@ cp_parser_omp_clause_reduction (cp_parser *parser, enum omp_clause_code kind, case CPP_PLUS: code = PLUS_EXPR; break; case CPP_MULT: code = MULT_EXPR; break; case CPP_MINUS: - warning_at (cp_lexer_peek_token (parser->lexer)->location, - OPT_Wdeprecated_openmp, - "%<-%> operator for reductions deprecated in OpenMP 5.2"); + if (is_omp) + warning_at (cp_lexer_peek_token (parser->lexer)->location, + OPT_Wdeprecated_openmp, + "%<-%> operator for reductions deprecated in OpenMP 5.2"); code = MINUS_EXPR; break; case CPP_AND: code = BIT_AND_EXPR; break; diff --git a/gcc/fortran/openmp.cc b/gcc/fortran/openmp.cc index 3150686cddee..31534ea0393a 100644 --- a/gcc/fortran/openmp.cc +++ b/gcc/fortran/openmp.cc @@ -1495,9 +1495,10 @@ gfc_match_omp_clause_reduction (char pc, gfc_omp_clauses *c, bool openacc, rop = OMP_REDUCTION_TIMES; else if (gfc_match_char ('-') == MATCH_YES) { - gfc_warning (OPT_Wdeprecated_openmp, - "%<-%> operator at %C for reductions deprecated in " - "OpenMP 5.2"); + if (!openacc) + gfc_warning (OPT_Wdeprecated_openmp, + "%<-%> operator at %C for reductions deprecated in " + "OpenMP 5.2"); rop = OMP_REDUCTION_MINUS; } else if (gfc_match (".and.") == MATCH_YES) diff --git a/gcc/testsuite/c-c++-common/goacc-gomp/nesting-fail-1.c b/gcc/testsuite/c-c++-common/goacc-gomp/nesting-fail-1.c index 740e164ea9ca..5925fd2abcd0 100644 --- a/gcc/testsuite/c-c++-common/goacc-gomp/nesting-fail-1.c +++ b/gcc/testsuite/c-c++-common/goacc-gomp/nesting-fail-1.c @@ -118,7 +118,7 @@ f_omp (void) ; } -#pragma omp master +#pragma omp masked { #pragma acc parallel /* { dg-error "OpenACC construct inside of non-OpenACC region" } */ ; @@ -229,7 +229,7 @@ f_acc_parallel (void) #pragma acc parallel { -#pragma omp master /* { dg-error "non-OpenACC construct inside of OpenACC region" } */ +#pragma omp masked /* { dg-error "non-OpenACC construct inside of OpenACC region" } */ ; } @@ -293,7 +293,7 @@ f_acc_kernels (void) #pragma acc kernels { -#pragma omp master /* { dg-error "non-OpenACC construct inside of OpenACC region" } */ +#pragma omp masked /* { dg-error "non-OpenACC construct inside of OpenACC region" } */ ; } @@ -357,7 +357,7 @@ f_acc_serial (void) #pragma acc serial { -#pragma omp master /* { dg-error "non-OpenACC construct inside of OpenACC region" } */ +#pragma omp masked /* { dg-error "non-OpenACC construct inside of OpenACC region" } */ ; } @@ -421,7 +421,7 @@ f_acc_data (void) #pragma acc data { -#pragma omp master /* { dg-error "non-OpenACC construct inside of OpenACC region" } */ +#pragma omp masked /* { dg-error "non-OpenACC construct inside of OpenACC region" } */ ; } @@ -492,7 +492,7 @@ f_acc_loop (void) #pragma acc loop for (i = 0; i < 2; ++i) { -#pragma omp master /* { dg-error "non-OpenACC construct inside of OpenACC routine" } */ +#pragma omp masked /* { dg-error "non-OpenACC construct inside of OpenACC routine" } */ ; } diff --git a/gcc/testsuite/c-c++-common/goacc-gomp/pr93465-1.c b/gcc/testsuite/c-c++-common/goacc-gomp/pr93465-1.c index c8b9135d9973..d5cd66114b23 100644 --- a/gcc/testsuite/c-c++-common/goacc-gomp/pr93465-1.c +++ b/gcc/testsuite/c-c++-common/goacc-gomp/pr93465-1.c @@ -1,9 +1,9 @@ -#pragma omp declare target +#pragma omp begin declare target #pragma acc routine seq /* { dg-error "cannot apply '#pragma acc routine' to '\(void \)?f1\(\\(\\)\)?', which has also been marked with an OpenMP 'declare target' directive" } */ void f1 (void) {} #pragma omp end declare target -#pragma omp declare target +#pragma omp begin declare target void f1 (void); #pragma acc routine seq /* { dg-error "cannot apply '#pragma acc routine' to '\(void \)?f1\(\\(\\)\)?', which has also been marked with an OpenMP 'declare target' directive" } */ @@ -11,12 +11,12 @@ void f1 (void); -#pragma omp declare target +#pragma omp begin declare target #pragma acc routine /* { dg-error "cannot apply '#pragma acc routine' to '\(void \)?f2\(\\(\\)\)?', which has also been marked with an OpenMP 'declare target' directive" } */ extern void f2 (void); #pragma omp end declare target -#pragma omp declare target +#pragma omp begin declare target extern void f2 (void); #pragma omp end declare target @@ -24,12 +24,12 @@ extern void f2 (void); extern void f2 (void); -#pragma omp declare target +#pragma omp begin declare target #pragma acc routine gang /* { dg-error "cannot apply '#pragma acc routine' to '\(void \)?f3\(\\(\\)\)?', which has also been marked with an OpenMP 'declare target' directive" } */ void f3 (void); #pragma omp end declare target -#pragma omp declare target +#pragma omp begin declare target void f3 (void) {} #pragma omp end declare target @@ -37,13 +37,13 @@ void f3 (void) {} /* Surprisingly, this diagnosis also works for '#pragma acc routine' first, - followed by '#pragma omp declare target'; the latter gets applied first. */ + followed by '#pragma omp begin declare target'; the latter gets applied first. */ #pragma acc routine /* { dg-error "cannot apply '#pragma acc routine' to '\(void \)?f4\(\\(\\)\)?', which has also been marked with an OpenMP 'declare target' directive" } */ extern void f4 (void); -#pragma omp declare target +#pragma omp begin declare target extern void f4 (void); #pragma omp end declare target @@ -51,6 +51,6 @@ extern void f4 (void); #pragma acc routine gang /* { dg-error "cannot apply '#pragma acc routine' to '\(void \)?f5\(\\(\\)\)?', which has also been marked with an OpenMP 'declare target' directive" } */ void f5 (void) {} -#pragma omp declare target +#pragma omp begin declare target extern void f5 (void); #pragma omp end declare target diff --git a/gcc/testsuite/g++.dg/vect/simd-clone-6.cc b/gcc/testsuite/g++.dg/vect/simd-clone-6.cc index 2d9bb62555ff..a5e6b5d6c30a 100644 --- a/gcc/testsuite/g++.dg/vect/simd-clone-6.cc +++ b/gcc/testsuite/g++.dg/vect/simd-clone-6.cc @@ -10,7 +10,7 @@ struct S { int a; }; int c[N], e[N], f[N]; S d[N]; -#pragma omp declare simd linear(ref(b, c) : 1) +#pragma omp declare simd linear(b, c : ref, step (1)) int foo (int a, S &b, int &c) { diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-15.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-15.c index 866f1000f340..a6c9d9c9a891 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-15.c +++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-15.c @@ -10,7 +10,7 @@ int array[N]; -#pragma omp declare simd linear(val(b):-3), notinbranch +#pragma omp declare simd linear(b: val, step (-3)), notinbranch __attribute__((noinline)) int foo (int a, int b) { diff --git a/gcc/testsuite/gfortran.dg/goacc-gomp/pr102330-1.f90 b/gcc/testsuite/gfortran.dg/goacc-gomp/pr102330-1.f90 index 025bcbf881ef..7b0e07fb623c 100644 --- a/gcc/testsuite/gfortran.dg/goacc-gomp/pr102330-1.f90 +++ b/gcc/testsuite/gfortran.dg/goacc-gomp/pr102330-1.f90 @@ -3,7 +3,7 @@ ! { dg-additional-options --param=openacc-privatization=noisy } subroutine r1 - !$omp master taskloop simd + !$omp masked taskloop simd do i = 1, 8 end do !$acc parallel loop ! { dg-line l_compute1 } diff --git a/gcc/testsuite/gfortran.dg/goacc/pr93329.f90 b/gcc/testsuite/gfortran.dg/goacc/pr93329.f90 index b2d25bda88b3..cf9c5560b701 100644 --- a/gcc/testsuite/gfortran.dg/goacc/pr93329.f90 +++ b/gcc/testsuite/gfortran.dg/goacc/pr93329.f90 @@ -1,6 +1,6 @@ ! PR fortran/93329 ! { dg-do compile { target fopenmp } } -! { dg-additional-options "-fopenmp" } +! { dg-additional-options "-fopenmp -Wno-deprecated-openmp" } integer :: x, y, z integer :: a(32) diff --git a/gcc/testsuite/gfortran.dg/gomp/allocate-16.f90 b/gcc/testsuite/gfortran.dg/gomp/allocate-16.f90 index 6bba4536e4b9..0e3a57d64eba 100644 --- a/gcc/testsuite/gfortran.dg/gomp/allocate-16.f90 +++ b/gcc/testsuite/gfortran.dg/gomp/allocate-16.f90 @@ -6,6 +6,6 @@ integer, pointer :: ptr allocate(ptr) end -! { dg-error "'!$OMP ALLOCATE' at .1. requires '-fopenmp-allocators'" "" { target *-*-* } 4 } -! { dg-warning "All files that might deallocate such a variable must be compiled with '-fopenmp-allocators'" "" { target *-*-* } 4 } +! { dg-error "'!\\\$OMP ALLOCATE' at .1. requires '-fopenmp-allocators'" "" { target *-*-* } .-4 } +! { dg-warning "All files that might deallocate such a variable must be compiled with '-fopenmp-allocators'" "" { target *-*-* } .-5 } ! { dg-note "This includes explicit DEALLOCATE, reallocation on intrinsic assignment, INTENT\\(OUT\\) for allocatable dummy arguments, and reallocation of allocatable components allocated with an OpenMP allocator" "" { target *-*-* } 0 } diff --git a/gcc/testsuite/gfortran.dg/gomp/groupprivate-2.f90 b/gcc/testsuite/gfortran.dg/gomp/groupprivate-2.f90 index 922d229bf89f..2e921ae542fa 100644 --- a/gcc/testsuite/gfortran.dg/gomp/groupprivate-2.f90 +++ b/gcc/testsuite/gfortran.dg/gomp/groupprivate-2.f90 @@ -1,3 +1,5 @@ +! { dg-additional-options "-Wno-deprecated-openmp" } + module m implicit none integer :: ii diff --git a/gcc/testsuite/gfortran.dg/gomp/groupprivate-5.f90 b/gcc/testsuite/gfortran.dg/gomp/groupprivate-5.f90 index c9f89feb4aa5..edc0945169f3 100644 --- a/gcc/testsuite/gfortran.dg/gomp/groupprivate-5.f90 +++ b/gcc/testsuite/gfortran.dg/gomp/groupprivate-5.f90 @@ -1,3 +1,5 @@ +! { dg-additional-options "-Wno-deprecated-openmp" } + module m implicit none integer :: ii diff --git a/gcc/testsuite/gfortran.dg/vect/pr86421.f90 b/gcc/testsuite/gfortran.dg/vect/pr86421.f90 index af40f40da9e1..d539e0b271ca 100644 --- a/gcc/testsuite/gfortran.dg/vect/pr86421.f90 +++ b/gcc/testsuite/gfortran.dg/vect/pr86421.f90 @@ -9,7 +9,7 @@ contains subroutine foo(x, y, z) real :: x integer :: y, z - !$omp declare simd linear(ref(x)) linear(val(y)) linear(uval(z)) + !$omp declare simd linear(x : ref) linear(y : val) linear(z : uval) x = x + y z = z + 1 end subroutine