[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