From patchwork Tue Feb 19 16:48:22 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mikael Morin X-Patchwork-Id: 221728 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 BE3B62C0091 for ; Wed, 20 Feb 2013 03:50:20 +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=1361897421; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Received: MIME-Version:From:To:Message-ID:In-Reply-To:References: User-Agent:Subject:Date:Content-Type:Mailing-List:Precedence: List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender: Delivered-To; bh=OsCBIvrTlsW6+A1nrvo53S942/c=; b=KzKgQdZRpppYp2X ob6/fWYU8XGs70QVL0r8/qzq1emAdrulfynPw/nzDhen764o4kUnBLzjztf552ut LO0Lq3KzC4NE3kMSA8yHrmb3ykxNQ8l04JapqXTg/mwWVEn9Fy5qWMv/M0jAV5Hd qtkCE0qNitOiqGAQpKjaM30yiE9E= 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:MIME-Version:From:To:Message-ID:In-Reply-To:References:User-Agent:Subject:Date:Content-Type:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=VuaSNfCQYZ/2Qty1H2VwBs0G3kX31+SnVu5v1pl+Hcijf5I9ixca9gPKgAGjbq ljVT4Vlu3QyLJLzwUABv00IJbkm7ZJggFG9tEXA2UVtd+G8wCHOjXWODjxvwhkag hX4+/3xOlurwZTDhtSwRn/+daOaslXskX9kHKNQmNG8Zg=; Received: (qmail 25924 invoked by alias); 19 Feb 2013 16:48:35 -0000 Received: (qmail 25834 invoked by uid 22791); 19 Feb 2013 16:48:29 -0000 X-SWARE-Spam-Status: No, hits=-2.6 required=5.0 tests=AWL, BAYES_00, KHOP_RCVD_UNTRUST, KHOP_THREADED, RCVD_IN_DNSWL_LOW, RCVD_IN_DNSWL_NONE, RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp21.services.sfr.fr (HELO smtp21.services.sfr.fr) (93.17.128.3) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 19 Feb 2013 16:48:23 +0000 Received: from filter.sfr.fr (localhost [127.0.0.1]) by msfrf2112.sfr.fr (SMTP Server) with ESMTP id 858127000140; Tue, 19 Feb 2013 17:48:22 +0100 (CET) Received: from [192.168.1.58] (94.15.72.86.rev.sfr.net [86.72.15.94]) by msfrf2112.sfr.fr (SMTP Server) with ESMTP id 400277000137; Tue, 19 Feb 2013 17:48:22 +0100 (CET) X-SFR-UUID: 20130219164822262.400277000137@msfrf2112.sfr.fr MIME-Version: 1.0 From: Mikael Morin To: gfortran , GCC patches Message-ID: <20130219164822.30845.6518@marvin> In-Reply-To: <20130219164810.30845.97901@marvin> References: <20130219164810.30845.97901@marvin> User-Agent: patchspam.py Subject: [Patch, fortran] [2/5] PR54730 ICE: confused by type-like fonctions: Extract restore_old_symbol. Date: Tue, 19 Feb 2013 17:48:22 +0100 (CET) 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 The ChangeLog says it all. 2013-02-15 Mikael Morin PR fortran/54730 * symbol.c (gfc_undo_symbols): Move code... (restore_old_symbol): ... here as a new function. diff --git a/symbol.c b/symbol.c index 2c122d0..4f1752d 100644 --- a/symbol.c +++ b/symbol.c @@ -2878,6 +2878,64 @@ find_common_symtree (gfc_symtree *st, gfc_common_head *head) } +/* Restore previous state of symbol. Just copy simple stuff. */ + +static void +restore_old_symbol (gfc_symbol *p) +{ + gfc_symbol *old; + + p->mark = 0; + old = p->old_symbol; + + p->ts.type = old->ts.type; + p->ts.kind = old->ts.kind; + + p->attr = old->attr; + + if (p->value != old->value) + { + gfc_free_expr (old->value); + p->value = NULL; + } + + if (p->as != old->as) + { + if (p->as) + gfc_free_array_spec (p->as); + p->as = old->as; + } + + p->generic = old->generic; + p->component_access = old->component_access; + + if (p->namelist != NULL && old->namelist == NULL) + { + gfc_free_namelist (p->namelist); + p->namelist = NULL; + } + else + { + if (p->namelist_tail != old->namelist_tail) + { + gfc_free_namelist (old->namelist_tail->next); + old->namelist_tail->next = NULL; + } + } + + p->namelist_tail = old->namelist_tail; + + if (p->formal != old->formal) + { + gfc_free_formal_arglist (p->formal); + p->formal = old->formal; + } + + free (p->old_symbol); + p->old_symbol = NULL; +} + + /* Undoes all the changes made to symbols in the current statement. This subroutine is made simpler due to the fact that attributes are never removed once added. */ @@ -2885,7 +2943,7 @@ find_common_symtree (gfc_symtree *st, gfc_common_head *head) void gfc_undo_symbols (void) { - gfc_symbol *p, *old; + gfc_symbol *p; unsigned i; FOR_EACH_VEC_ELT (changes->syms, i, p) @@ -2944,58 +3002,9 @@ gfc_undo_symbols (void) gfc_delete_symtree (&p->ns->sym_root, p->name); gfc_release_symbol (p); - continue; - } - - /* Restore previous state of symbol. Just copy simple stuff. */ - p->mark = 0; - old = p->old_symbol; - - p->ts.type = old->ts.type; - p->ts.kind = old->ts.kind; - - p->attr = old->attr; - - if (p->value != old->value) - { - gfc_free_expr (old->value); - p->value = NULL; - } - - if (p->as != old->as) - { - if (p->as) - gfc_free_array_spec (p->as); - p->as = old->as; - } - - p->generic = old->generic; - p->component_access = old->component_access; - - if (p->namelist != NULL && old->namelist == NULL) - { - gfc_free_namelist (p->namelist); - p->namelist = NULL; } else - { - if (p->namelist_tail != old->namelist_tail) - { - gfc_free_namelist (old->namelist_tail->next); - old->namelist_tail->next = NULL; - } - } - - p->namelist_tail = old->namelist_tail; - - if (p->formal != old->formal) - { - gfc_free_formal_arglist (p->formal); - p->formal = old->formal; - } - - free (p->old_symbol); - p->old_symbol = NULL; + restore_old_symbol (p); } changes->syms.truncate (0);