Hi all, I have just committed as obvious a patch for an ICE-on-valid problem with PROCEDURE statements:
http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=179723 The problem was the following: When setting up an external procedure or procedure pointer (declared via a PROCEDURE statement), we copy the expressions for the array bounds and string length from the interface symbol given in the PROCEDURE declaration (cf. 'resolve_procedure_interface'). If those expressions depend on the actual args of the interface, we have to replace those args by the args of the new procedure symbol that we're setting up. This is what 'gfc_expr_replace_symbols' / 'replace_symbol' does. Unfortunately we failed to check whether the symbol we try to replace is actually a dummy! Contrary to Andrew's initial assumption, I think the test case is valid. I could neither find a compiler which rejects it, nor a restriction in the standard which makes it invalid. The relevant part of F08 is probably chapter 7.1.11 ("Specification expression"). This states that a specification expression can contain variables, which are made accessible via use association. I'm planning to apply the patch to the 4.6, 4.5 and 4.4 branches soon. Cheers, Janus