[Bug fortran/56500] [OOP] "IMPLICIT CLASS(...)" wrongly rejected
dominiq at lps dot ens.fr
gcc-bugzilla@gcc.gnu.org
Sun Mar 17 19:46:00 GMT 2013
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).
More information about the Gcc-bugs
mailing list