From acb388a0cb8503c7ee94a74c725903e539a19115 Mon Sep 17 00:00:00 2001 From: Jerry DeLisle Date: Fri, 16 May 2008 16:44:28 +0000 Subject: [PATCH] re PR fortran/34325 (Wrong error message for syntax error) 2008-05-16 Jerry DeLisle PR fortran/34325 * decl.c (match_attr_spec): Check for matching pairs of parenthesis. * expr.c (gfc_specification_expr): Supplement the error message with the type that was found. * resolve.c (gfc_resolve_index): Likewise. * match.c (gfc_match_parens): Clarify error message with "at or before". (gfc_match_do): Check for matching pairs of parenthesis. From-SVN: r135428 --- gcc/fortran/ChangeLog | 10 ++++++++++ gcc/fortran/decl.c | 7 +++++++ gcc/fortran/expr.c | 3 ++- gcc/fortran/match.c | 10 +++++++--- gcc/fortran/resolve.c | 4 ++-- 5 files changed, 28 insertions(+), 6 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 51a82c9e442..73bd3e295a6 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,13 @@ +2008-05-16 Jerry DeLisle + + PR fortran/34325 + * decl.c (match_attr_spec): Check for matching pairs of parenthesis. + * expr.c (gfc_specification_expr): Supplement the error message with the + type that was found. + * resolve.c (gfc_resolve_index): Likewise. + * match.c (gfc_match_parens): Clarify error message with "at or before". + (gfc_match_do): Check for matching pairs of parenthesis. + 2008-05-16 Tobias Burnus ts.type != BT_INTEGER) { - gfc_error ("Expression at %L must be of INTEGER type", &e->where); + gfc_error ("Expression at %L must be of INTEGER type, found %s", + &e->where, gfc_basic_typename (e->ts.type)); return FAILURE; } diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c index 8c836151954..d3f665f4440 100644 --- a/gcc/fortran/match.c +++ b/gcc/fortran/match.c @@ -153,12 +153,12 @@ gfc_match_parens (void) if (count > 0) { - gfc_error ("Missing ')' in statement before %L", &where); + gfc_error ("Missing ')' in statement at or before %L", &where); return MATCH_ERROR; } if (count < 0) { - gfc_error ("Missing '(' in statement before %L", &where); + gfc_error ("Missing '(' in statement at or before %L", &where); return MATCH_ERROR; } @@ -553,7 +553,6 @@ gfc_match_name (char *buffer) return MATCH_ERROR; } - buffer[i] = '\0'; gfc_current_locus = old_loc; @@ -1749,6 +1748,11 @@ gfc_match_do (void) if (gfc_match_char (',') != MATCH_YES && gfc_match ("% ") != MATCH_YES) return MATCH_NO; + /* Check for balanced parens. */ + + if (gfc_match_parens () == MATCH_ERROR) + return MATCH_ERROR; + /* See if we have a DO WHILE. */ if (gfc_match (" while ( %e )%t", &iter.end) == MATCH_YES) { diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 6338b068ecc..bf886240061 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -3510,8 +3510,8 @@ gfc_resolve_index (gfc_expr *index, int check_scalar) if (index->ts.type != BT_INTEGER && index->ts.type != BT_REAL) { - gfc_error ("Array index at %L must be of INTEGER type", - &index->where); + gfc_error ("Array index at %L must be of INTEGER type, found %s", + &index->where, gfc_basic_typename (index->ts.type)); return FAILURE; } -- 2.30.2