aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/array.c
diff options
context:
space:
mode:
authorTobias Burnus <burnus@gcc.gnu.org>2012-09-12 12:05:19 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2012-09-12 12:05:19 +0200
commit6273c3c2af3a9acdeeea3583bc317046bda55cf7 (patch)
tree70a3ab6722daa98240e9aa45eec07e2c8ca5f5bc /gcc/fortran/array.c
parent98aa03f4cbda0caf569a3ceaa218ef2c80d19898 (diff)
downloadgcc-6273c3c2af3a9acdeeea3583bc317046bda55cf7.zip
gcc-6273c3c2af3a9acdeeea3583bc317046bda55cf7.tar.gz
gcc-6273c3c2af3a9acdeeea3583bc317046bda55cf7.tar.bz2
re PR fortran/54225 (fortran compiler segfault processing ' print *, A(1,*) ')
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-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. From-SVN: r191213
Diffstat (limited to 'gcc/fortran/array.c')
-rw-r--r--gcc/fortran/array.c13
1 files changed, 9 insertions, 4 deletions
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",