PR fortran/30883
* parse.c (parse_interface): Use the default types from the
formal namespace if a function or its result do not have a type
after parsing the specification statements.
2007-03-11 Paul Thomas <pault@gcc.gnu.org>
PR fortran/30883
* gfortran.dg/interface_11.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@122822
138bc75d-0d04-0410-961f-
82ee72b054a4
+2007-03-11 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/30883
+ * parse.c (parse_interface): Use the default types from the
+ formal namespace if a function or its result do not have a type
+ after parsing the specification statements.
+
2007-03-08 Brooks Moses <brooks.moses@codesourcery.com>
* intrinsic.texi: (ICHAR) Improve internal I/O note.
/* Read data declaration statements. */
st = parse_spec (ST_NONE);
+ /* Since the interface block does not permit an IMPLICIT statement,
+ the default type for the function or the result must be taken
+ from the formal namespace. */
+ if (new_state == COMP_FUNCTION)
+ {
+ if (prog_unit->result == prog_unit
+ && prog_unit->ts.type == BT_UNKNOWN)
+ gfc_set_default_type (prog_unit, 1, prog_unit->formal_ns);
+ else if (prog_unit->result != prog_unit
+ && prog_unit->result->ts.type == BT_UNKNOWN)
+ gfc_set_default_type (prog_unit->result, 1,
+ prog_unit->formal_ns);
+ }
+
if (st != ST_END_SUBROUTINE && st != ST_END_FUNCTION)
{
gfc_error ("Unexpected %s statement at %C in INTERFACE body",
+2007-03-11 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/30883
+ * gfortran.dg/interface_11.f90: New test.
+
2007-03-11 Richard Guenther <rguenther@suse.de>
PR tree-optimization/31115
--- /dev/null
+! { dg-do compile }
+! Tests the fix for PR30883 in which interface functions and
+! their results did not get an implicit type.
+!
+! Contributed by Joost VandeVondele <jv244@cam.ac.uk>
+!
+MODULE M1
+ IMPLICIT NONE
+CONTAINS
+ SUBROUTINE S1(F1, F2, G1, G2)
+ INTERFACE
+ FUNCTION F1(i, a)
+ END FUNCTION F1
+ FUNCTION F2(i, a)
+ implicit complex (a-z)
+ END FUNCTION F2
+ END INTERFACE
+ INTERFACE
+ FUNCTION g1(i, a) result(z)
+ END FUNCTION g1
+ FUNCTION g2(i, a) result(z)
+ implicit complex (a-z)
+ END FUNCTION g2
+ END INTERFACE
+ END SUBROUTINE S1
+END MODULE
+
+END
+! { dg-final { cleanup-modules "m1" } }