The following code is invalid, but accepted by gfortran: interface real function bar() end function bar end interface dimension :: bar(4)
It is invalid, since section 12.3.2.1 of the Fortran 2003 standard states: "An interface body specifies all of the characteristics of the explicit specific interface or abstract interface. The specification part of an interface body may specify attributes or define values for data entities that do not determine characteristics of the procedure. Such specifications have no effect." This means that there may be no additional attributes specified outside of the interface body. g95 correctly gives the following error message for this test case: dimension :: bar(4) 1 Error: Attribute declaration of 'bar' at (1) is outside of the INTERFACE body The test case also has to be rejected when the order of the statements is exchanged: dimension :: bar(4) interface real function bar() end function bar end interface This is probably even harder to detect. g95's error message for this case is: dimension :: bar(4) 1 Error: Symbol 'bar' at (1) conflicts with the same name in an encompassing program unit I think it would be desirable for gfortran to print out the same message for both cases. -- Summary: attribute declaration outside of INTERFACE body Product: gcc Version: 4.4.0 Status: UNCONFIRMED Keywords: accepts-invalid Severity: normal Priority: P3 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: janus at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36361