http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56500
--- Comment #5 from Dominique d'Humieres <dominiq at lps dot ens.fr> 2013-03-17 19:46:16 UTC --- > The patches of comment 2 and comment 3 regtest cleanly. With the patches applied to a clean revision 196754 I have lot of errors in my tests and at least one failure for the test suite: [macbook] f90/bug% /opt/gcc/gcc4.9p-196754p1/bin/gfortran /opt/gcc/work/gcc/testsuite/gfortran.dg/array_constructor_42.f90 /opt/gcc/work/gcc/testsuite/gfortran.dg/array_constructor_42.f90:13.21: intrinsic :: real 1 Error: Symbol 'real' at (1) has no IMPLICIT type /opt/gcc/work/gcc/testsuite/gfortran.dg/array_constructor_42.f90:20.21: intrinsic :: real 1 Error: Symbol 'real' at (1) has no IMPLICIT type The patch I have is diff -up ../_clean/gcc/fortran/decl.c ../p_work/gcc/fortran/decl.c --- ../_clean/gcc/fortran/decl.c 2013-02-02 11:15:07.000000000 +0100 +++ ../p_work/gcc/fortran/decl.c 2013-03-17 18:43:50.000000000 +0100 @@ -6293,6 +6293,13 @@ attr_decl1 (void) } } + if (sym->ts.type == BT_UNKNOWN + && gfc_set_default_type (sym, 1, NULL) == FAILURE) + { + m = MATCH_ERROR; + goto cleanup; + } + /* Update symbol table. DIMENSION attribute is set in gfc_set_array_spec(). For CLASS variables, this must be applied to the first component, or '_data' field. */ diff -up ../_clean/gcc/fortran/resolve.c ../p_work/gcc/fortran/resolve.c --- ../_clean/gcc/fortran/resolve.c 2013-03-10 14:25:57.000000000 +0100 +++ ../p_work/gcc/fortran/resolve.c 2013-03-17 18:43:50.000000000 +0100 @@ -318,7 +318,13 @@ resolve_formal_arglist (gfc_symbol *proc { if (sym->ts.type == BT_UNKNOWN && !proc->attr.intrinsic && (!sym->attr.function || sym->result == sym)) - gfc_set_default_type (sym, 1, sym->ns); + { + gfc_set_default_type (sym, 1, sym->ns); + if (sym->ts.type == BT_CLASS + && gfc_build_class_symbol (&sym->ts, &sym->attr, + &sym->as, false) == FAILURE) + continue; + } } as = sym->ts.type == BT_CLASS && sym->attr.class_ok (the patch in comment #3 is rejected and I have applied it manually, may be I made a mistake I cannot spot).