From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20662 invoked by alias); 17 Mar 2013 19:46:39 -0000 Received: (qmail 20584 invoked by uid 48); 17 Mar 2013 19:46:17 -0000 From: "dominiq at lps dot ens.fr" To: gcc-bugs@gcc.gnu.org Subject: [Bug fortran/56500] [OOP] "IMPLICIT CLASS(...)" wrongly rejected Date: Sun, 17 Mar 2013 19:46:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: fortran X-Bugzilla-Keywords: rejects-valid X-Bugzilla-Severity: normal X-Bugzilla-Who: dominiq at lps dot ens.fr X-Bugzilla-Status: ASSIGNED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: janus at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2013-03/txt/msg01271.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56500 --- Comment #5 from Dominique d'Humieres 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).