Commit 4bc20f3a by Mikael Morin

re PR fortran/42051 ([OOP] ICE on array-valued function with CLASS formal argument)

2010-08-04  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.

From-SVN: r162865
parent 455e6d5b
2010-08-04 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.
2010-08-04 Tobias Burnus <burnus@net-b.de> 2010-08-04 Tobias Burnus <burnus@net-b.de>
PR fortran/44857 PR fortran/44857
* resolve.c (resolve_structure_cons): Fix handling of * resolve.c (resolve_structure_cons): Fix handling of
initialization structcture constructors with character initialization structure constructors with character
elements of the wrong length. elements of the wrong length.
* array.c (gfc_check_iter_variable): Add NULL check. * array.c (gfc_check_iter_variable): Add NULL check.
(gfc_resolve_character_array_constructor): Also truncate (gfc_resolve_character_array_constructor): Also truncate
......
...@@ -2557,7 +2557,7 @@ void gfc_traverse_ns (gfc_namespace *, void (*)(gfc_symbol *)); ...@@ -2557,7 +2557,7 @@ void gfc_traverse_ns (gfc_namespace *, void (*)(gfc_symbol *));
void gfc_traverse_user_op (gfc_namespace *, void (*)(gfc_user_op *)); void gfc_traverse_user_op (gfc_namespace *, void (*)(gfc_user_op *));
void gfc_save_all (gfc_namespace *); void gfc_save_all (gfc_namespace *);
void gfc_symbol_state (void); void gfc_enforce_clean_symbol_state (void);
void gfc_free_dt_list (void); void gfc_free_dt_list (void);
......
...@@ -236,9 +236,7 @@ decode_statement (void) ...@@ -236,9 +236,7 @@ decode_statement (void)
match m; match m;
char c; char c;
#ifdef GFC_DEBUG gfc_enforce_clean_symbol_state ();
gfc_symbol_state ();
#endif
gfc_clear_error (); /* Clear any pending errors. */ gfc_clear_error (); /* Clear any pending errors. */
gfc_clear_warning (); /* Clear any pending warnings. */ gfc_clear_warning (); /* Clear any pending warnings. */
...@@ -484,9 +482,7 @@ decode_omp_directive (void) ...@@ -484,9 +482,7 @@ decode_omp_directive (void)
locus old_locus; locus old_locus;
char c; char c;
#ifdef GFC_DEBUG gfc_enforce_clean_symbol_state ();
gfc_symbol_state ();
#endif
gfc_clear_error (); /* Clear any pending errors. */ gfc_clear_error (); /* Clear any pending errors. */
gfc_clear_warning (); /* Clear any pending warnings. */ gfc_clear_warning (); /* Clear any pending warnings. */
...@@ -588,9 +584,7 @@ decode_gcc_attribute (void) ...@@ -588,9 +584,7 @@ decode_gcc_attribute (void)
{ {
locus old_locus; locus old_locus;
#ifdef GFC_DEBUG gfc_enforce_clean_symbol_state ();
gfc_symbol_state ();
#endif
gfc_clear_error (); /* Clear any pending errors. */ gfc_clear_error (); /* Clear any pending errors. */
gfc_clear_warning (); /* Clear any pending warnings. */ gfc_clear_warning (); /* Clear any pending warnings. */
...@@ -879,7 +873,6 @@ blank_line: ...@@ -879,7 +873,6 @@ blank_line:
return ST_NONE; return ST_NONE;
} }
extern gfc_symbol *changed_syms;
/* Return the next non-ST_NONE statement to the caller. We also worry /* 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. */ about including files and the ends of include files at this stage. */
...@@ -890,8 +883,7 @@ next_statement (void) ...@@ -890,8 +883,7 @@ next_statement (void)
gfc_statement st; gfc_statement st;
locus old_locus; locus old_locus;
/* We start with a clean state. */ gfc_enforce_clean_symbol_state ();
gcc_assert (changed_syms == NULL);
gfc_new_block = NULL; gfc_new_block = NULL;
......
...@@ -98,7 +98,7 @@ gfc_namespace *gfc_global_ns_list; ...@@ -98,7 +98,7 @@ gfc_namespace *gfc_global_ns_list;
gfc_gsymbol *gfc_gsym_root = NULL; gfc_gsymbol *gfc_gsym_root = NULL;
gfc_symbol *changed_syms = NULL; static gfc_symbol *changed_syms = NULL;
gfc_dt_list *gfc_derived_types; gfc_dt_list *gfc_derived_types;
...@@ -2503,6 +2503,7 @@ gfc_free_symbol (gfc_symbol *sym) ...@@ -2503,6 +2503,7 @@ gfc_free_symbol (gfc_symbol *sym)
/* Decrease the reference counter and free memory when we reach zero. */ /* Decrease the reference counter and free memory when we reach zero. */
void void
gfc_release_symbol (gfc_symbol *sym) gfc_release_symbol (gfc_symbol *sym)
{ {
...@@ -3442,16 +3443,13 @@ gfc_save_all (gfc_namespace *ns) ...@@ -3442,16 +3443,13 @@ gfc_save_all (gfc_namespace *ns)
} }
#ifdef GFC_DEBUG
/* Make sure that no changes to symbols are pending. */ /* Make sure that no changes to symbols are pending. */
void void
gfc_symbol_state(void) { gfc_enforce_clean_symbol_state(void)
{
if (changed_syms != NULL) gcc_assert (changed_syms == NULL);
gfc_internal_error("Symbol changes still pending!");
} }
#endif
/************** Global symbol handling ************/ /************** Global symbol handling ************/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment