From patchwork Mon Feb 4 18:39:36 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Mikael Morin X-Patchwork-Id: 218033 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id F25232C02AB for ; Tue, 5 Feb 2013 05:40:25 +1100 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1360608026; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: Message-ID:Date:From:User-Agent:MIME-Version:To:CC:Subject: References:In-Reply-To:Content-Type:Mailing-List:Precedence: List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender: Delivered-To; bh=UeE3uybuwVI/4GCJUZYvtU1d7RM=; b=WgdlZdv9B7Sn1vE /5wU7FwE4Q/z0Gf4LFrfWJqwsIvW58IJNMcYdrdHErrN5R1Ql2oVyCDS5H2BNv7E knwkJnwH006+AVBan0h8fSdwLIsxh0L9fsFTBo+AVCLyZo4RRd73Gc61sfEpArMG zGG3/hhi+ow982e2MolC2JDawdJ8= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:Received:X-SFR-UUID:Message-ID:Date:From:User-Agent:MIME-Version:To:CC:Subject:References:In-Reply-To:Content-Type:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=qdytlOch/sDHqR8KPJ/OmKfpmlAoztaa8dCrEstjyu8fLzOA56fzeZfCclTWh0 Zl8z5Cs5q0GM3rAlytVYZKQUihCxEJopFyGdnvFnkjAZNUCZafUD33dxBsqaZHjU sqlG5vo72OMLyW/9/Msq4X/3b4niyljkG5k5smq5l9vfE=; Received: (qmail 22473 invoked by alias); 4 Feb 2013 18:39:56 -0000 Received: (qmail 22161 invoked by uid 22791); 4 Feb 2013 18:39:51 -0000 X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL, BAYES_00, KHOP_THREADED, RCVD_IN_DNSWL_NONE, RCVD_IN_HOSTKARMA_NO, RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp22.services.sfr.fr (HELO smtp22.services.sfr.fr) (93.17.128.12) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 04 Feb 2013 18:39:42 +0000 Received: from filter.sfr.fr (localhost [127.0.0.1]) by msfrf2213.sfr.fr (SMTP Server) with ESMTP id 569AD700012C; Mon, 4 Feb 2013 19:39:41 +0100 (CET) Received: from [192.168.1.58] (50.183.72.86.rev.sfr.net [86.72.183.50]) by msfrf2213.sfr.fr (SMTP Server) with ESMTP id E2BF47000070; Mon, 4 Feb 2013 19:39:40 +0100 (CET) X-SFR-UUID: 20130204183940928.E2BF47000070@msfrf2213.sfr.fr Message-ID: <51100068.2040808@sfr.fr> Date: Mon, 04 Feb 2013 19:39:36 +0100 From: Mikael Morin User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130127 Thunderbird/17.0.2 MIME-Version: 1.0 To: Janus Weil CC: gfortran , gcc-patches Subject: Re: [Patch, fortran] PR54107: ICE on recursive interfaces and PR54195: symbol bogusly inserted twice in the interface. References: <510ED7FA.2050900@sfr.fr> <510FB16A.1080605@sfr.fr> In-Reply-To: <510FB16A.1080605@sfr.fr> X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Le 04/02/2013 14:02, Mikael Morin a écrit : >>> The fix, as discussed in PR54195, adds a flag to mark a symbol as >>> resolved. >> >> Why not add this flag directly to gfc_symbol instead of >> symbol_attribute? It seems we do not need the attribute for components >> (or do we?). > Hum, indeed. symbol_attribute, despite its name, also applies to > components :-/. > OK, I'll move the flag to gfc_symbol. > Committed as follows. revision 195729. The other patch will follow. Index: testsuite/gfortran.dg/recursive_interface_1.f90 =================================================================== --- testsuite/gfortran.dg/recursive_interface_1.f90 (révision 0) +++ testsuite/gfortran.dg/recursive_interface_1.f90 (révision 195729) @@ -0,0 +1,20 @@ +! { dg-do compile } +! +! PR fortran/54107 +! The compiler used to ICE on recursive interfaces. + +module m + contains + function foo() result(r1) + procedure(foo), pointer :: r1 + end function foo + + function bar() result(r2) + procedure(baz), pointer :: r2 + end function bar + + function baz() result(r3) + procedure(bar), pointer :: r3 + end function baz +end module m + Index: testsuite/ChangeLog =================================================================== --- testsuite/ChangeLog (révision 195728) +++ testsuite/ChangeLog (révision 195729) @@ -1,3 +1,8 @@ +2013-02-04 Mikael Morin + + PR fortran/54107 + * gfortran.dg/recursive_interface_1.f90: New test. + 2013-02-04 Richard Guenther PR lto/56168 @@ -97,7 +102,7 @@ * lib/target-supports-dg.exp (dg-process-target): Use expr to evaluate the end index in string range. -2012-01-30 Tobias Burnus +2013-01-30 Tobias Burnus PR fortran/56138 * gfortran.dg/allocatable_function_6.f90: New. Index: fortran/gfortran.h =================================================================== --- fortran/gfortran.h (révision 195728) +++ fortran/gfortran.h (révision 195729) @@ -1248,6 +1248,9 @@ typedef struct gfc_symbol unsigned equiv_built:1; /* Set if this variable is used as an index name in a FORALL. */ unsigned forall_index:1; + /* Used to avoid multiple resolutions of a single symbol. */ + unsigned resolved:1; + int refs; struct gfc_namespace *ns; /* namespace containing this symbol */ Index: fortran/ChangeLog =================================================================== --- fortran/ChangeLog (révision 195728) +++ fortran/ChangeLog (révision 195729) @@ -1,3 +1,12 @@ +2013-02-04 Mikael Morin + + PR fortran/54107 + PR fortran/54195 + * gfortran.h (struct gfc_symbol): New field 'resolved'. + * resolve.c (resolve_fl_var_and_proc): Don't skip result symbols. + (resolve_symbol): Skip duplicate calls. Don't check the current + namespace. + 2013-02-02 Thomas Koenig PR fortran/50627 @@ -7,7 +16,7 @@ * parse.c (parse_module): Do not put namespace into gsymbol on error. -2012-01-30 Tobias Burnus +2013-01-30 Tobias Burnus PR fortran/56138 * trans-decl.c (gfc_trans_deferred_vars): Fix deferred-length @@ -214,7 +223,7 @@ finalizer_insert_packed_call, generate_finalization_wrapper): Clean up by using gfc_build_intrinsic_call. -2012-01-07 Tobias Burnus +2013-01-07 Tobias Burnus PR fortran/55763 * resolve.c (resolve_select_type): Reject intrinsic types for Index: fortran/resolve.c =================================================================== --- fortran/resolve.c (révision 195728) +++ fortran/resolve.c (révision 195729) @@ -11051,11 +11051,6 @@ resolve_fl_var_and_proc (gfc_symbol *sym, int mp_f { gfc_array_spec *as; - /* Avoid double diagnostics for function result symbols. */ - if ((sym->result || sym->attr.result) && !sym->attr.dummy - && (sym->ns != gfc_current_ns)) - return SUCCESS; - if (sym->ts.type == BT_CLASS && sym->attr.class_ok) as = CLASS_DATA (sym)->as; else @@ -13170,6 +13165,10 @@ resolve_symbol (gfc_symbol *sym) gfc_array_spec *as; bool saved_specification_expr; + if (sym->resolved) + return; + sym->resolved = 1; + if (sym->attr.artificial) return; @@ -13779,7 +13778,6 @@ resolve_symbol (gfc_symbol *sym) described in 14.7.5, to those variables that have not already been assigned one. */ if (sym->ts.type == BT_DERIVED - && sym->ns == gfc_current_ns && !sym->value && !sym->attr.allocatable && !sym->attr.alloc_comp)