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 <jakub@redhat.com>
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.
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:
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;
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)
;
}
-#pragma omp master
+#pragma omp masked
{
#pragma acc parallel /* { dg-error "OpenACC construct inside of non-OpenACC region" } */
;
#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" } */
;
}
#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" } */
;
}
#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" } */
;
}
#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" } */
;
}
#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" } */
;
}
-#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" } */
-#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
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
/* 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
#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
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)
{
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)
{
! { 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 }
! 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)
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 }
+! { dg-additional-options "-Wno-deprecated-openmp" }
+
module m
implicit none
integer :: ii
+! { dg-additional-options "-Wno-deprecated-openmp" }
+
module m
implicit none
integer :: ii
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