[PATCH] Fix invalid COLLAPSE argument diagnostics (PR fortran/40878)

Jakub Jelinek jakub@redhat.com
Tue Jul 28 17:22:00 GMT 2009


Hi!

gfc_match_omp_clauses wasn't calling gfc_error_now nor returning a match
error in this case, which lead to the diagnostics being silently discarded.

Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux.
Committed to trunk, will commit to 4.4 after testing there.

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.

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

--- gcc/fortran/openmp.c.jj	2009-05-19 10:51:25.000000000 +0200
+++ gcc/fortran/openmp.c	2009-07-28 13:00:35.000000000 +0200
@@ -396,12 +396,13 @@ gfc_match_omp_clauses (gfc_omp_clauses *
 	      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;
--- gcc/testsuite/gfortran.dg/gomp/pr40878-1.f90.jj	2009-07-28 13:18:52.000000000 +0200
+++ gcc/testsuite/gfortran.dg/gomp/pr40878-1.f90	2009-07-28 13:33:14.000000000 +0200
@@ -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
--- gcc/testsuite/gfortran.dg/gomp/pr40878-2.f90.jj	2009-07-28 13:18:55.000000000 +0200
+++ gcc/testsuite/gfortran.dg/gomp/pr40878-2.f90	2009-07-28 13:20:37.000000000 +0200
@@ -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

	Jakub



More information about the Gcc-patches mailing list