aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/array.c13
-rw-r--r--gcc/testsuite/ChangeLog36
-rw-r--r--gcc/testsuite/gfortran.dg/array_section_3.f9017
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_10.f906
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_28.f9010
6 files changed, 68 insertions, 21 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index f0e6cad..45f1c9f 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,10 @@
+2012-09-12 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/54225
+ PR fortran/53306
+ * array.c (match_subscript, gfc_match_array_ref): Fix
+ diagnostic of coarray's '*'.
+
2012-09-07 Mikael Morin <mikael@gcc.gnu.org>
PR fortran/54208
diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c
index 07fecd8..44ec72e 100644
--- a/gcc/fortran/array.c
+++ b/gcc/fortran/array.c
@@ -91,9 +91,7 @@ match_subscript (gfc_array_ref *ar, int init, bool match_star)
else if (!star)
m = gfc_match_expr (&ar->start[i]);
- if (m == MATCH_NO && gfc_match_char ('*') == MATCH_YES)
- return MATCH_NO;
- else if (m == MATCH_NO)
+ if (m == MATCH_NO)
gfc_error ("Expected array subscript at %C");
if (m != MATCH_YES)
return MATCH_ERROR;
@@ -224,7 +222,7 @@ coarray:
for (ar->codimen = 0; ar->codimen + ar->dimen < GFC_MAX_DIMENSIONS; ar->codimen++)
{
- m = match_subscript (ar, init, ar->codimen == (corank - 1));
+ m = match_subscript (ar, init, true);
if (m == MATCH_ERROR)
return MATCH_ERROR;
@@ -255,6 +253,13 @@ coarray:
gfc_error ("Invalid form of coarray reference at %C");
return MATCH_ERROR;
}
+ else if (ar->dimen_type[ar->codimen + ar->dimen] == DIMEN_STAR)
+ {
+ gfc_error ("Unexpected '*' for codimension %d of %d at %C",
+ ar->codimen + 1, corank);
+ return MATCH_ERROR;
+ }
+
if (ar->codimen >= corank)
{
gfc_error ("Invalid codimension %d at %C, only %d codimensions exist",
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 04d912b..a72e8ef 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2012-09-12 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/54225
+ PR fortran/53306
+ * gfortran.dg/coarray_10.f90: Update dg-error.
+ * gfortran.dg/coarray_28.f90: New.
+ * gfortran.dg/array_section_3.f90: New.
+
2012-09-11 Christophe Lyon <christophe.lyon@linaro.org>
gcc/testsuite/
@@ -6,22 +14,22 @@
2012-09-11 Marc Glisse <marc.glisse@inria.fr>
- * gcc.dg/tree-ssa/forwprop-22.c: New testcase.
+ * gcc.dg/tree-ssa/forwprop-22.c: New testcase.
2012-09-11 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
- Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
-
- * gcc.target/arm/neon-vfma-1.c: New testcase.
- * gcc.target/arm/neon-vfms-1.c: Likewise.
- * gcc.target/arm/neon-vmla-1.c: Update test to use int instead
- of float.
- * gcc.target/arm/neon-vmls-1.c: Likewise.
- * lib/target-supports.exp (add_options_for_arm_neonv2): New
- function.
- (check_effective_target_arm_neonv2_ok_nocache): Likewise.
- (check_effective_target_arm_neonv2_ok): Likewise.
- (check_effective_target_arm_neonv2_hw): Likewise.
- (check_effective_target_arm_neonv2): Likewise.
+ Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
+
+ * gcc.target/arm/neon-vfma-1.c: New testcase.
+ * gcc.target/arm/neon-vfms-1.c: Likewise.
+ * gcc.target/arm/neon-vmla-1.c: Update test to use int instead
+ of float.
+ * gcc.target/arm/neon-vmls-1.c: Likewise.
+ * lib/target-supports.exp (add_options_for_arm_neonv2): New
+ function.
+ (check_effective_target_arm_neonv2_ok_nocache): Likewise.
+ (check_effective_target_arm_neonv2_ok): Likewise.
+ (check_effective_target_arm_neonv2_hw): Likewise.
+ (check_effective_target_arm_neonv2): Likewise.
2012-09-11 Richard Guenther <rguenther@suse.de>
diff --git a/gcc/testsuite/gfortran.dg/array_section_3.f90 b/gcc/testsuite/gfortran.dg/array_section_3.f90
new file mode 100644
index 0000000..d3093d1
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/array_section_3.f90
@@ -0,0 +1,17 @@
+! { dg-do compile }
+!
+! PR fortran/54225
+!
+! Contributed by robb wu
+!
+program test
+ implicit none
+ real :: A(2,3)
+
+ print *, A(1, *) ! { dg-error "Expected array subscript" }
+end program
+
+subroutine test2
+integer, dimension(2) :: a
+a(*) = 1 ! { dg-error "Expected array subscript" }
+end
diff --git a/gcc/testsuite/gfortran.dg/coarray_10.f90 b/gcc/testsuite/gfortran.dg/coarray_10.f90
index 99f5782..78abb5a 100644
--- a/gcc/testsuite/gfortran.dg/coarray_10.f90
+++ b/gcc/testsuite/gfortran.dg/coarray_10.f90
@@ -30,12 +30,12 @@ end subroutine this_image_check
subroutine rank_mismatch()
implicit none
integer,allocatable :: A(:)[:,:,:,:]
- allocate(A(1)[1,1,1:*]) ! { dg-error "Unexpected ... for codimension" }
+ allocate(A(1)[1,1,1:*]) ! { dg-error "Too few codimensions" }
allocate(A(1)[1,1,1,1,1,*]) ! { dg-error "Invalid codimension 5" }
allocate(A(1)[1,1,1,*])
allocate(A(1)[1,1]) ! { dg-error "Too few codimensions" }
allocate(A(1)[1,*]) ! { dg-error "Too few codimensions" }
- allocate(A(1)[1,1:*]) ! { dg-error "Unexpected ... for codimension" }
+ allocate(A(1)[1,1:*]) ! { dg-error "Too few codimensions" }
A(1)[1,1,1] = 1 ! { dg-error "Too few codimensions" }
A(1)[1,1,1,1,1,1] = 1 ! { dg-error "Invalid codimension 5" }
@@ -48,5 +48,5 @@ end subroutine rank_mismatch
subroutine rank_mismatch2()
implicit none
integer, allocatable:: A(:)[:,:,:]
- allocate(A(1)[7:8,4:*]) ! { dg-error "Unexpected .*. for codimension 2 of 3" }
+ allocate(A(1)[7:8,4:*]) ! { dg-error "Too few codimensions" }
end subroutine rank_mismatch2
diff --git a/gcc/testsuite/gfortran.dg/coarray_28.f90 b/gcc/testsuite/gfortran.dg/coarray_28.f90
new file mode 100644
index 0000000..ca6f863
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/coarray_28.f90
@@ -0,0 +1,10 @@
+! { dg-do compile }
+! { dg-options "-fcoarray=single" }
+!
+! PR fortran/54225
+!
+
+integer, allocatable :: a[:,:]
+
+allocate (a[*,4]) ! { dg-error "Unexpected '.' for codimension 1 of 2" }
+end