https://gcc.gnu.org/g:1152c67150f4051d1a44ed52e8aafe3c9bbe4eb9

commit r17-5095-g1152c67150f4051d1a44ed52e8aafe3c9bbe4eb9
Author: Tobias Burnus <[email protected]>
Date:   Mon Oct 12 18:01:27 2026 +0200

    OpenMP/Fortran: permit non-const expr for 'priority' clause again
    
    This partially reverts r17-5077-g8bb7a53a0df5c5 by permitting non-constant
    expressions to the 'priority' clause again.  OpenMP since at least 4.5 did
    so until 5.1, since 5.2 it must be constant, which seems to be a syntax
    conversion bug (tracked as OpenMP Issue 5176).
    
    gcc/fortran/ChangeLog:
    
            * openmp.cc (resolve_omp_clauses): Permit non-constant expressions
            for 'priority' clause again.
    
    gcc/testsuite/ChangeLog:
    
            * gfortran.dg/gomp/masked-1.f90: Revert to pre-r17-5077 using a
            non-constant priority-clause expr.
            * gfortran.dg/gomp/taskloop-1.f90: Likewise.
            * gfortran.dg/gomp/taskloop-2.f90: Use -1 as priority and update
            dg-*.

Diff:
---
 gcc/fortran/openmp.cc                         | 2 +-
 gcc/testsuite/gfortran.dg/gomp/masked-1.f90   | 5 ++---
 gcc/testsuite/gfortran.dg/gomp/taskloop-1.f90 | 5 ++---
 gcc/testsuite/gfortran.dg/gomp/taskloop-2.f90 | 2 +-
 4 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/gcc/fortran/openmp.cc b/gcc/fortran/openmp.cc
index 0ed83519a643..ac2001e29b35 100644
--- a/gcc/fortran/openmp.cc
+++ b/gcc/fortran/openmp.cc
@@ -11794,7 +11794,7 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses 
*omp_clauses,
                 "constant hint expression", &omp_clauses->hint->where);
     }
   if (omp_clauses->priority)
-    resolve_nonnegative_int_expr (omp_clauses->priority, "PRIORITY", false);
+    resolve_nonnegative_int_expr (omp_clauses->priority, "PRIORITY", true);
   if (omp_clauses->dist_chunk_size)
     {
       gfc_expr *expr = omp_clauses->dist_chunk_size;
diff --git a/gcc/testsuite/gfortran.dg/gomp/masked-1.f90 
b/gcc/testsuite/gfortran.dg/gomp/masked-1.f90
index 1502e8724af4..2b2526ac7127 100644
--- a/gcc/testsuite/gfortran.dg/gomp/masked-1.f90
+++ b/gcc/testsuite/gfortran.dg/gomp/masked-1.f90
@@ -42,14 +42,13 @@ subroutine foo (x, a)
   !$omp end masked
 end
 
-subroutine foobar (d, f, fi, p, s, g, i1, i2, l, ll, nth, ntm, q, r, r2)
+subroutine foobar (d, f, fi, p, s, g, i1, i2, l, ll, nth, ntm, pp, q, r, r2)
   implicit none (type, external)
   logical :: i1, i2, fi
-  integer :: i, d, f, p, s, g, l, ll, nth, ntm, q, r, r2
+  integer :: i, d, f, p, s, g, l, ll, nth, ntm, pp, q, r, r2
   allocatable :: q
   integer, save :: t
   !$omp threadprivate (t)
-  integer, parameter :: pp = 3
 
   !$omp parallel masked &
   !$omp&  private (p) firstprivate (f) if (parallel: i2) default(shared) 
shared(s) reduction(+:r) &
diff --git a/gcc/testsuite/gfortran.dg/gomp/taskloop-1.f90 
b/gcc/testsuite/gfortran.dg/gomp/taskloop-1.f90
index e3fef34b219d..46901712a246 100644
--- a/gcc/testsuite/gfortran.dg/gomp/taskloop-1.f90
+++ b/gcc/testsuite/gfortran.dg/gomp/taskloop-1.f90
@@ -7,14 +7,13 @@ module m
   !$omp declare target to(f, l, ll, r, r2)
 end module m
 
-subroutine foo(fi, p, g, s, nta, nth, ntm, i1, i2, i3, q)
+subroutine foo(fi, p, pp, g, s, nta, nth, ntm, i1, i2, i3, q)
   use m
   implicit none
-  integer, value :: p, g, s, nta, nth, ntm
+  integer, value :: p, pp, g, s, nta, nth, ntm
   logical, value :: fi, i1, i2, i3
   integer, pointer :: q(:)
   integer :: i
-  integer, parameter :: pp = 3
 
   !$omp taskgroup task_reduction(+:r2) !allocate (r2)
   !$omp taskloop simd &
diff --git a/gcc/testsuite/gfortran.dg/gomp/taskloop-2.f90 
b/gcc/testsuite/gfortran.dg/gomp/taskloop-2.f90
index 6a81295d5468..6644e82d6373 100644
--- a/gcc/testsuite/gfortran.dg/gomp/taskloop-2.f90
+++ b/gcc/testsuite/gfortran.dg/gomp/taskloop-2.f90
@@ -42,7 +42,7 @@ end do
 do i = 1, 64                                 ! { dg-error "OMP SCAN between 
two structured block sequences" "" { target *-*-* } .-1 }
 end do
 
-!$omp parallel master taskloop reduction(+: r) priority(r) ! { dg-error 
"INTEGER expression of PRIORITY clause at .1. must be non-negtive and constant" 
}
+!$omp parallel master taskloop reduction(+: r) priority(-1) ! { dg-warning 
"INTEGER expression of PRIORITY clause at .1. must be non-negative 
\\\[-Wopenmp\\\]" }
 do i = 1, 64
 end do
 end

Reply via email to