re PR fortran/40878 (!$omp collapse(m) with non-constant m should give error)
authorJakub Jelinek <jakub@redhat.com>
Tue, 28 Jul 2009 16:15:47 +0000 (18:15 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 28 Jul 2009 16:15:47 +0000 (18:15 +0200)
PR fortran/40878
* openmp.c (gfc_match_omp_clauses): Use gfc_error_now instead of
gfc_error to diagnose invalid COLLAPSE arguments.

* gfortran.dg/gomp/pr40878-1.f90: New test.
* gfortran.dg/gomp/pr40878-2.f90: New test.

From-SVN: r150165

gcc/fortran/ChangeLog
gcc/fortran/openmp.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/gomp/pr40878-1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/pr40878-2.f90 [new file with mode: 0644]

index ea622e565bfecb8640a1f3c962d15caa39a27106..623c601c1738d0853bfc19c0615aede64da9fb23 100644 (file)
@@ -1,3 +1,9 @@
+2009-07-28  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/40878
+       * openmp.c (gfc_match_omp_clauses): Use gfc_error_now instead of
+       gfc_error to diagnose invalid COLLAPSE arguments.
+
 2009-07-28  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/40882
index 608d605c951f11cddc2782f252cfa4707f13d5ea..320fb65c97ce9434b80d47469ed8995fc89c4dee 100644 (file)
@@ -396,12 +396,13 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, int mask)
              const char *p = gfc_extract_int (cexpr, &collapse);
              if (p)
                {
-                 gfc_error (p);
+                 gfc_error_now (p);
                  collapse = 1;
                }
              else if (collapse <= 0)
                {
-                 gfc_error ("COLLAPSE clause argument not constant positive integer at %C");
+                 gfc_error_now ("COLLAPSE clause argument not"
+                                " constant positive integer at %C");
                  collapse = 1;
                }
              c->collapse = collapse;
index 2899b3a4d002e9fb34ab576909c2dd2a7b6d7861..ac5dc98973ff538b7f32499655175aa048e28479 100644 (file)
@@ -1,5 +1,9 @@
 2009-07-28  Jakub Jelinek  <jakub@redhat.com>
 
+       PR fortran/40878
+       * gfortran.dg/gomp/pr40878-1.f90: New test.
+       * gfortran.dg/gomp/pr40878-2.f90: New test.
+
        PR testsuite/40891
        * gcc.dg/cdce1.c: Adjust note line number.
        * gcc.dg/cdce2.c: Likewise.
diff --git a/gcc/testsuite/gfortran.dg/gomp/pr40878-1.f90 b/gcc/testsuite/gfortran.dg/gomp/pr40878-1.f90
new file mode 100644 (file)
index 0000000..86202ab
--- /dev/null
@@ -0,0 +1,63 @@
+! PR fortran/40878
+! { dg-do compile }
+! { dg-options "-fopenmp" }
+
+subroutine test1
+  integer :: j, k
+  integer :: m = 2
+!$omp parallel do collapse(m) schedule (static,1) ! { dg-error "Constant expression required" }
+  do k = 1, 2
+    do j = 1, 6
+    enddo
+  enddo
+!$omp end parallel do
+end
+subroutine test2
+  integer :: j, k
+  integer :: m
+  m = 2
+!$omp parallel do collapse(m) schedule (static,1) ! { dg-error "Constant expression required" }
+  do k = 1, 2
+    do j = 1, 6
+    enddo
+  enddo
+!$omp end parallel do
+end
+subroutine test3
+  integer :: j, k
+  integer, parameter :: m = 0
+!$omp parallel do collapse(m) schedule (static,1) ! { dg-error "not constant positive integer" }
+  do k = 1, 2
+    do j = 1, 6
+    enddo
+  enddo
+!$omp end parallel do
+end
+subroutine test4
+  integer :: j, k
+  integer, parameter :: m = -2
+!$omp parallel do collapse(m) schedule (static,1) ! { dg-error "not constant positive integer" }
+  do k = 1, 2
+    do j = 1, 6
+    enddo
+  enddo
+!$omp end parallel do
+end
+subroutine test5
+  integer :: j, k
+!$omp parallel do collapse(0) schedule (static,1) ! { dg-error "not constant positive integer" }
+  do k = 1, 2
+    do j = 1, 6
+    enddo
+  enddo
+!$omp end parallel do
+end
+subroutine test6
+  integer :: j, k
+!$omp parallel do collapse(-1) schedule (static,1) ! { dg-error "not constant positive integer" }
+  do k = 1, 2
+    do j = 1, 6
+    enddo
+  enddo
+!$omp end parallel do
+end
diff --git a/gcc/testsuite/gfortran.dg/gomp/pr40878-2.f90 b/gcc/testsuite/gfortran.dg/gomp/pr40878-2.f90
new file mode 100644 (file)
index 0000000..a118aa8
--- /dev/null
@@ -0,0 +1,23 @@
+! PR fortran/40878
+! { dg-do compile }
+! { dg-options "-fopenmp" } 
+
+subroutine test1
+  integer :: j, k
+  integer, parameter :: m = 2
+!$omp parallel do collapse(m) schedule (static,1)
+  do k = 1, 2
+    do j = 1, 6
+    enddo
+  enddo
+!$omp end parallel do
+end
+subroutine test2
+  integer :: j, k
+!$omp parallel do collapse(2) schedule (static,1)
+  do k = 1, 2
+    do j = 1, 6
+    enddo
+  enddo
+!$omp end parallel do
+end