[Bug fortran/32760] [4.3 Regression] Error defining subroutine named PRINT

burnus at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Fri Feb 1 09:35:00 GMT 2008



------- Comment #28 from burnus at gcc dot gnu dot org  2008-02-01 09:34 -------
> > A fix for the PR
> > This is regtesting as I write.  It fixes the first three PRs but not that of
> > comment #25.

I'm not so happy about the != '(' in:

+       /* These are definitive indicators that this is a variable.  */
        else if (gfc_peek_char () != '(' || sym->ts.type != BT_UNKNOWN

As "integer, .... ::" shows,  != '('  is not a bullet-proof sign for a
variable. (I should not complain too loudly, however, as I have written that
part.)


+       else if (sym->ns == gfc_current_ns->parent
+                  && sym->ts.type == BT_UNKNOWN)
+         break;

I think you can have:
        else if (sym->ns == gfc_current_ns->parent
                 && (sym->ts.type == BT_UNKNOWN || sym->attr.pointer
                     || sym->as != NULL))

As the following can also not be a procedure name:

module m
  pointer p
  dimension d(4)
contains
  ...

(A procedure can have a pointer attribute or be a vector but this is already
taken care of by: "if(sym->attr.external || sym->attr.procedure ||
sym->attr.function || sym->attr.subroutine) flavor = FL_PROCEDURE;")

Thanks for looking into this.


-- 


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



More information about the Gcc-bugs mailing list