From: Tobias Burnus Date: Wed, 12 Sep 2012 10:05:19 +0000 (+0200) Subject: re PR fortran/54225 (fortran compiler segfault processing ' print *, A(1,*) ') X-Git-Tag: misc/gccgo-go1_1_2~923 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6273c3c2af3a9acdeeea3583bc317046bda55cf7;p=thirdparty%2Fgcc.git re PR fortran/54225 (fortran compiler segfault processing ' print *, A(1,*) ') 2012-09-12 Tobias Burnus PR fortran/54225 PR fortran/53306 * array.c (match_subscript, gfc_match_array_ref): Fix diagnostic of coarray's '*'. 2012-09-12 Tobias Burnus 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. From-SVN: r191213 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index f0e6cad64650..45f1c9fd48d9 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2012-09-12 Tobias Burnus + + PR fortran/54225 + PR fortran/53306 + * array.c (match_subscript, gfc_match_array_ref): Fix + diagnostic of coarray's '*'. + 2012-09-07 Mikael Morin PR fortran/54208 diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c index 07fecd8aaf38..44ec72eb87c5 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 04d912b4b7a6..a72e8efcdc65 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2012-09-12 Tobias Burnus + + 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 gcc/testsuite/ @@ -6,22 +14,22 @@ 2012-09-11 Marc Glisse - * gcc.dg/tree-ssa/forwprop-22.c: New testcase. + * gcc.dg/tree-ssa/forwprop-22.c: New testcase. 2012-09-11 Ramana Radhakrishnan - Matthew Gretton-Dann - - * 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 + + * 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 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 000000000000..d3093d14d503 --- /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 99f5782e35b2..78abb5ad1912 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 000000000000..ca6f863568a8 --- /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