]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fortran/OpenMP: Reject non-scalar 'holds' expr in 'omp assume(s)' [PR107706]
authorTobias Burnus <tobias@codesourcery.com>
Mon, 16 Jan 2023 11:37:41 +0000 (12:37 +0100)
committerTobias Burnus <tobias@codesourcery.com>
Mon, 16 Jan 2023 11:37:41 +0000 (12:37 +0100)
gcc/fortran/ChangeLog:

PR fortran/107706
* openmp.cc (gfc_resolve_omp_assumptions): Reject nonscalars.

gcc/testsuite/ChangeLog:

PR fortran/107706
* gfortran.dg/gomp/assume-2.f90: Update dg-error.
* gfortran.dg/gomp/assumes-2.f90: Likewise.
* gfortran.dg/gomp/assume-5.f90: New test.

(cherry picked from commit 2ce55247a8bf32985a96ed63a7a92d36746723dc)

gcc/fortran/ChangeLog.omp
gcc/fortran/openmp.cc
gcc/testsuite/ChangeLog.omp
gcc/testsuite/gfortran.dg/gomp/assume-2.f90
gcc/testsuite/gfortran.dg/gomp/assume-5.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/assumes-2.f90

index 6fef25a3a0154693032051788dbaff35abce39de..4450c067d87fca703627ed6a486038038a81ec9d 100644 (file)
@@ -1,3 +1,11 @@
+2023-01-16  Tobias Burnus  <tobias@codesourcery.com>
+
+       Backported from master:
+       2023-01-12  Tobias Burnus  <tobias@codesourcery.com>
+
+       PR fortran/107706
+       * openmp.cc (gfc_resolve_omp_assumptions): Reject nonscalars.
+
 2022-12-21  Tobias Burnus  <tobias@codesourcery.com>
 
        Backported from master:
index 06944f392c37a2b618ff61173eab183c1f0d15c8..7679dbef0882170e86188e99aaef00a7591dc51f 100644 (file)
@@ -7701,9 +7701,11 @@ void
 gfc_resolve_omp_assumptions (gfc_omp_assumptions *assume)
 {
   for (gfc_expr_list *el = assume->holds; el; el = el->next)
-    if (!gfc_resolve_expr (el->expr) || el->expr->ts.type != BT_LOGICAL)
-       gfc_error ("HOLDS expression at %L must be a logical expression",
-                  &el->expr->where);
+    if (!gfc_resolve_expr (el->expr)
+       || el->expr->ts.type != BT_LOGICAL
+       || el->expr->rank != 0)
+      gfc_error ("HOLDS expression at %L must be a scalar logical expression",
+                &el->expr->where);
 }
 
 
index ae810eb4eadd56c921b21ecb27563bc964f47377..d4b483b124b3659258986f11453cfafdd47a6bcb 100644 (file)
@@ -1,3 +1,13 @@
+2023-01-16  Tobias Burnus  <tobias@codesourcery.com>
+
+       Backported from master:
+       2023-01-12  Tobias Burnus  <tobias@codesourcery.com>
+
+       PR fortran/107706
+       * gfortran.dg/gomp/assume-2.f90: Update dg-error.
+       * gfortran.dg/gomp/assumes-2.f90: Likewise.
+       * gfortran.dg/gomp/assume-5.f90: New test.
+
 2023-01-09  Tobias Burnus  <tobias@codesourcery.com>
 
        Backport from mainline:
index ca3e04dfe95b63c6265f8c04d9b49f17c040124b..dc306a9088a3f8cec14ad543e8e673aa8f878966 100644 (file)
@@ -22,6 +22,6 @@ subroutine foo (i, a)
   end if
 !  !$omp end assume  - silence: 'Unexpected !$OMP END ASSUME statement'
 
-  !$omp assume holds (1.0)  ! { dg-error "HOLDS expression at .1. must be a logical expression" }
+  !$omp assume holds (1.0)  ! { dg-error "HOLDS expression at .1. must be a scalar logical expression" }
   !$omp end assume
 end
diff --git a/gcc/testsuite/gfortran.dg/gomp/assume-5.f90 b/gcc/testsuite/gfortran.dg/gomp/assume-5.f90
new file mode 100644 (file)
index 0000000..a922f89
--- /dev/null
@@ -0,0 +1,20 @@
+! PR fortran/107706
+!
+! Contributed by G. Steinmetz
+!
+
+integer function f(i)
+   implicit none
+   !$omp assumes holds(i < g())  ! { dg-error "HOLDS expression at .1. must be a scalar logical expression" }
+   integer, value :: i
+
+   !$omp assume holds(i < g())  ! { dg-error "HOLDS expression at .1. must be a scalar logical expression" }
+   block
+   end block
+   f = 3
+contains
+   function g()
+      integer :: g(2)
+      g = 4
+   end
+end
index 729c9737a1c0cee9467d15ae5f0148e4fca86085..c8719a86a948945009aba95ca0b2fbbf8bf11d96 100644 (file)
@@ -4,7 +4,7 @@ module m
   !$omp assumes contains(target) holds(x > 0.0)
   !$omp assumes absent(target)
   !$omp assumes holds(0.0)
-! { dg-error "HOLDS expression at .1. must be a logical expression" "" { target *-*-* } .-1 }
+! { dg-error "HOLDS expression at .1. must be a scalar logical expression" "" { target *-*-* } .-1 }
 end module
 
 module m2