Patchwork [fortran] Use gfc_symbol_state.

login
register
mail settings
Submitter Mikael Morin
Date Aug. 2, 2010, 6:13 p.m.
Message ID <4C570AD6.8090400@sfr.fr>
Download mbox | patch
Permalink /patch/60562/
State New
Headers show

Comments

Mikael Morin - Aug. 2, 2010, 6:13 p.m.
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  <mikael@gcc.gnu.org>

	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.
Daniel Kraft - Aug. 4, 2010, 8:55 a.m.
Mikael Morin wrote:
> 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 ?

Ok.  Thanks for the patch!

Daniel
Mikael Morin - Aug. 4, 2010, 2:18 p.m.
Le 04.08.2010 10:55, Daniel Kraft a écrit :
>
> Mikael Morin wrote:
>> 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 ?
>
> Ok. Thanks for the patch!
>
> Daniel
>
Committed at revision 162865. Thanks

Mikael

Patch

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;