From patchwork Mon Aug 2 18:13:42 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mikael Morin X-Patchwork-Id: 60562 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 3C8331007D1 for ; Tue, 3 Aug 2010 04:14:15 +1000 (EST) Received: (qmail 3323 invoked by alias); 2 Aug 2010 18:14:12 -0000 Received: (qmail 3307 invoked by uid 22791); 2 Aug 2010 18:14:11 -0000 X-SWARE-Spam-Status: No, hits=0.5 required=5.0 tests=AWL, BAYES_05, RCVD_IN_DNSWL_NONE, SPF_NEUTRAL, T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp22.services.sfr.fr (HELO smtp22.services.sfr.fr) (93.17.128.11) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 02 Aug 2010 18:14:06 +0000 Received: from filter.sfr.fr (localhost [127.0.0.1]) by msfrf2206.sfr.fr (SMTP Server) with ESMTP id 2740D70000A2; Mon, 2 Aug 2010 20:14:02 +0200 (CEST) Received: from gimli.local (73.123.193-77.rev.gaoland.net [77.193.123.73]) by msfrf2206.sfr.fr (SMTP Server) with ESMTP id C035F7000090; Mon, 2 Aug 2010 20:14:01 +0200 (CEST) X-SFR-UUID: 20100802181401787.C035F7000090@msfrf2206.sfr.fr Message-ID: <4C570AD6.8090400@sfr.fr> Date: Mon, 02 Aug 2010 20:13:42 +0200 From: Mikael Morin User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; fr-FR; rv:1.9.1.11) Gecko/20100725 Thunderbird/3.0.6 MIME-Version: 1.0 To: "fortran@gcc.gnu.org" , gcc-patches Subject: [patch, fortran] Use gfc_symbol_state. 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 Hello, this implements an idea from Janus, to use gfc_symbol_state instead of gcc_assert (changed_syms == NULL). While at it, the patch also modifies gfc_symbol_state as follows : - It changes the conditional internal error into a gcc_assert, as the error message was not very helpful to a non-gfortran-developer. - the gcc_assert also handles the #if GFC_DEBUG condition better, as it is enabled/disabled by configure (--enable-checking), documented, etc. So the #if GFC_DEBUG conditions are removed . Probably nobody was enabling it. - the function is renamed into something more descriptive (gfc_symbol_state->gfc_enforce_clean_symbol_state) Regression tested on x86_64-unknown-freebsd8.0. OK for trunk ? Mikael 2010-08-02 Mikael Morin PR fortran/42051 PR fortran/44064 * symbol.c (changed_syms): Made static again. (gfc_symbol_state): Don't conditionalize on GFC_DEBUG. Changed conditional internal error into assert. Rename function to ... (gfc_enforce_clean_symbol_state): ... this. * gfortran.h (gfc_symbol_state, gfc_enforce_clean_symbol_state): Rename the former to the latter. * parse.c (decode_statement, decode_omp_directive, decode_gcc_attribute): Update callers accordingly. Don't conditionalize on GFC_DEBUG. (changed_syms): Remove declaration. (next_statement): Use gfc_enforce_clean_symbol_state. Index: symbol.c =================================================================== --- symbol.c (revision 162821) +++ symbol.c (working copy) @@ -98,7 +98,7 @@ gfc_namespace *gfc_global_ns_list; gfc_gsymbol *gfc_gsym_root = NULL; -gfc_symbol *changed_syms = NULL; +static gfc_symbol *changed_syms = NULL; gfc_dt_list *gfc_derived_types; @@ -3442,16 +3442,13 @@ gfc_save_all (gfc_namespace *ns) } -#ifdef GFC_DEBUG /* Make sure that no changes to symbols are pending. */ void -gfc_symbol_state(void) { - - if (changed_syms != NULL) - gfc_internal_error("Symbol changes still pending!"); +gfc_enforce_clean_symbol_state(void) +{ + gcc_assert (changed_syms == NULL); } -#endif /************** Global symbol handling ************/ Index: gfortran.h =================================================================== --- gfortran.h (revision 162820) +++ gfortran.h (working copy) @@ -2557,7 +2557,7 @@ void gfc_traverse_ns (gfc_namespace *, void (*)(gf void gfc_traverse_user_op (gfc_namespace *, void (*)(gfc_user_op *)); void gfc_save_all (gfc_namespace *); -void gfc_symbol_state (void); +void gfc_enforce_clean_symbol_state (void); void gfc_free_dt_list (void); Index: parse.c =================================================================== --- parse.c (revision 162821) +++ parse.c (working copy) @@ -236,9 +236,7 @@ decode_statement (void) match m; char c; -#ifdef GFC_DEBUG - gfc_symbol_state (); -#endif + gfc_enforce_clean_symbol_state (); gfc_clear_error (); /* Clear any pending errors. */ gfc_clear_warning (); /* Clear any pending warnings. */ @@ -484,9 +482,7 @@ decode_omp_directive (void) locus old_locus; char c; -#ifdef GFC_DEBUG - gfc_symbol_state (); -#endif + gfc_enforce_clean_symbol_state (); gfc_clear_error (); /* Clear any pending errors. */ gfc_clear_warning (); /* Clear any pending warnings. */ @@ -588,9 +584,7 @@ decode_gcc_attribute (void) { locus old_locus; -#ifdef GFC_DEBUG - gfc_symbol_state (); -#endif + gfc_enforce_clean_symbol_state (); gfc_clear_error (); /* Clear any pending errors. */ gfc_clear_warning (); /* Clear any pending warnings. */ @@ -879,7 +873,6 @@ blank_line: return ST_NONE; } -extern gfc_symbol *changed_syms; /* Return the next non-ST_NONE statement to the caller. We also worry about including files and the ends of include files at this stage. */ @@ -890,8 +883,7 @@ next_statement (void) gfc_statement st; locus old_locus; - /* We start with a clean state. */ - gcc_assert (changed_syms == NULL); + gfc_enforce_clean_symbol_state (); gfc_new_block = NULL;