------- 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