[Bug fortran/25252] ICE on invalid code

fxcoudert at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Sat Nov 10 00:53:00 GMT 2007



------- Comment #16 from fxcoudert at gcc dot gnu dot org  2007-11-10 00:53 -------
The following patch clears part of the problem, for example the following
testcase:

module g
  interface i
    module procedure sint => sreal
  end interface i
end module g

More is needed, but I'm stuck. I've used valgrind, and I think we don't recover
well after gfc_match_modproc() exiting with MATCH_ERROR.


Index: decl.c
===================================================================
--- decl.c      (revision 129869)
+++ decl.c      (working copy)
@@ -5862,12 +5862,23 @@ gfc_match_modproc (void)

   for (;;)
     {
+      bool last = false;
+
       m = gfc_match_name (name);
       if (m == MATCH_NO)
        goto syntax;
       if (m != MATCH_YES)
        return MATCH_ERROR;

+      /* Check for syntax error before starting to add symbols to the
+        current namespace.  */
+      if (gfc_match_eos () == MATCH_YES)
+       last = true;
+      if (!last && gfc_match_char (',') != MATCH_YES)
+       goto syntax;
+
+      /* Now we're sure the syntax is valid, we process this item
+        further.  */
       if (gfc_get_symbol (name, module_ns, &sym))
        return MATCH_ERROR;

@@ -5881,10 +5892,8 @@ gfc_match_modproc (void)

       sym->attr.mod_proc = 1;

-      if (gfc_match_eos () == MATCH_YES)
+      if (last)
        break;
-      if (gfc_match_char (',') != MATCH_YES)
-       goto syntax;
     }

   return MATCH_YES;


-- 

fxcoudert at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |fxcoudert at gcc dot gnu dot
                   |                            |org
   Last reconfirmed|2007-11-02 13:18:42         |2007-11-10 00:53:08
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25252



More information about the Gcc-bugs mailing list