re PR fortran/32545 (Give an (compile time) error not a warning for wrong edit format...
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Wed, 4 Jul 2007 01:08:48 +0000 (01:08 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Wed, 4 Jul 2007 01:08:48 +0000 (01:08 +0000)
2007-07-03  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR fortran/32545
* io.c (check_format): Always call gfc_error for errors.
(check_format_string): Change type of this function to try and
return the result of check_format.
(check_io_constraints): Return MATCH_ERROR if check_format_string
returns FAILURE.

2007-07-03  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR fortran/32612
* decl.c (get_proc_name): Include attr->mod_proc in check for error.

From-SVN: r126295

gcc/fortran/ChangeLog
gcc/fortran/decl.c
gcc/fortran/io.c

index 2fe400ca13afa3441a83fcb354ab568878e9366b..c12809706777e448c7877ad8a7142644462001f4 100644 (file)
@@ -1,3 +1,17 @@
+2007-07-03  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR fortran/32545
+       * io.c (check_format): Always call gfc_error for errors.
+       (check_format_string): Change type of this function to try and
+       return the result of check_format.
+       (check_io_constraints): Return MATCH_ERROR if check_format_string
+       returns FAILURE.
+
+2007-07-03  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR fortran/32612
+       * decl.c (get_proc_name): Include attr->mod_proc in check for error.
+
 2007-07-03  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR fortran/32432
index 24f1a3d1b59521b4b45b9fc405339dcecc4b41f8..b3bbe75d162329752eef6ce7e2af97b4419b06d7 100644 (file)
@@ -708,7 +708,8 @@ get_proc_name (const char *name, gfc_symbol **result, bool module_fcn_entry)
       /* Trap a procedure with a name the same as interface in the
         encompassing scope.  */
       if (sym->attr.generic != 0
-         && (sym->attr.subroutine || sym->attr.function))
+         && (sym->attr.subroutine || sym->attr.function)
+         && !sym->attr.mod_proc)
        gfc_error_now ("Name '%s' at %C is already defined"
                       " as a generic interface at %L",
                       name, &sym->declared_at);
index e8f4debbd4e62c6d2d4f954616f12b06ca62d4c8..7f5e575ab36a1604cf7f2165b661aa41b687dc0b 100644 (file)
@@ -842,20 +842,10 @@ extension_optional_comma:
   goto format_item;
 
 syntax:
-  /* Something went wrong.  If the format we're checking is a string,
-     generate a warning, since the program is correct.  If the format
-     is in a FORMAT statement, this messes up parsing, which is an
-     error.  */
-  if (mode != MODE_STRING)
-    gfc_error ("%s in format string at %C", error);
-  else
-    {
-      gfc_warning ("%s in format string at %C", error);
-
-      /* TODO: More elaborate measures are needed to show where a problem
-        is within a format string that has been calculated.  */
-    }
+  gfc_error ("%s in format string at %C", error);
 
+  /* TODO: More elaborate measures are needed to show where a problem
+     is within a format string that has been calculated.  */
   rv = FAILURE;
 
 finished:
@@ -866,12 +856,12 @@ finished:
 /* Given an expression node that is a constant string, see if it looks
    like a format string.  */
 
-static void
+static try
 check_format_string (gfc_expr *e, bool is_input)
 {
   mode = MODE_STRING;
   format_string = e->value.character.string;
-  check_format (is_input);
+  return check_format (is_input);
 }
 
 
@@ -2752,8 +2742,9 @@ if (condition) \
     }
 
   expr = dt->format_expr;
-  if (expr != NULL && expr->expr_type == EXPR_CONSTANT)
-    check_format_string (expr, k == M_READ);
+  if (expr != NULL && expr->expr_type == EXPR_CONSTANT
+      && check_format_string (expr, k == M_READ) == FAILURE)
+    return MATCH_ERROR;
 
   return m;
 }