I think the following code is invalid: interface subroutine foo end subroutine end interface external foo
Because the INTERFACE statement already specifies the EXTERNAL attribute, which is thus specified twice. This code *is* actually rejected (as of rev. 135859), but the error message is completely wrong: external :: foo 1 Error: EXTERNAL attribute conflicts with SUBROUTINE attribute at (1) (which it does *not* for this case) Quoting the Fortran 2003 standard (section 5.1.2.6): "The EXTERNAL attribute speciï¬es that an entity is an external procedure, dummy procedure, procedure pointer, or block data subprogram. This attribute may also be speciï¬ed by an EXTERNAL statement (12.3.2.2), a procedure-declaration-stmt (12.3.2.3) or an interface body that is not in an abstract interface block (12.3.2.1)." And further on in section 12.3.2.1: "An interface body in a generic or speciï¬c interface block speciï¬es the EXTERNAL attribute and an explicit speciï¬c interface for an external procedure or a dummy procedure. If the name of the declared procedure is that of a dummy argument in the subprogram containing the interface body, the procedure is a dummy procedure; otherwise, it is an external procedure." -- Summary: specific or generic INTERFACE implies the EXTERNAL attribute Product: gcc Version: 4.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: jaydub66 at gmail dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36325