re PR fortran/34325 (Wrong error message for syntax error)
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Fri, 16 May 2008 16:44:28 +0000 (16:44 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Fri, 16 May 2008 16:44:28 +0000 (16:44 +0000)
2008-05-16  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

    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
gcc/fortran/decl.c
gcc/fortran/expr.c
gcc/fortran/match.c
gcc/fortran/resolve.c

index 51a82c9e442ff66efe1d7beef162c7bc3af818ab..73bd3e295a65b6d385c052b306bda1fa2a5b6d5f 100644 (file)
@@ -1,3 +1,13 @@
+2008-05-16  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+    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  <burnus@net-b.de
 
        * intrinsic.texi: Write Fortran 77/90/95 instead of F77/90/95;
index 24606c448cf329df6986f7e6ae79ed1c9d09c1fd..5a1ce038f1fc0e322c4c8a2f7ca1f2d5c88ed984 100644 (file)
@@ -2934,6 +2934,13 @@ match_attr_spec (void)
          goto cleanup;
        }
 
+      /* Check to make sure any parens are paired up correctly.  */
+      if (gfc_match_parens () == MATCH_ERROR)
+       {
+         m = MATCH_ERROR;
+         goto cleanup;
+       }
+
       seen[d]++;
       seen_at[d] = gfc_current_locus;
 
index 87ea9e95090c0be9d846ce095d0a87ede41f02e0..e6c1e4e9dbec0987c59e585a38c4e4390d5f7909 100644 (file)
@@ -2573,7 +2573,8 @@ gfc_specification_expr (gfc_expr *e)
 
   if (e->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;
     }
 
index 8c83615195496fc240b54b9f8537c56bc8a16464..d3f665f4440ee6703ed7a4d34deb5e217cfa283d 100644 (file)
@@ -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)
     {
index 6338b068ecce3845f3e959dd118b574658999733..bf886240061088161bca62817198e2479258b934 100644 (file)
@@ -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;
     }