diff options
author | Mikael Morin <mikael@gcc.gnu.org> | 2013-03-03 17:34:42 +0000 |
---|---|---|
committer | Mikael Morin <mikael@gcc.gnu.org> | 2013-03-03 17:34:42 +0000 |
commit | ab68a73ede62fbcbb3abd07879838ebe81fdd484 (patch) | |
tree | b845cd1c7ec2eb129f2b1ede285390fbfc00a15c /gcc/fortran/gfortran.h | |
parent | 4ef9b950005a24aab3b0ea7da77f16292ef587b4 (diff) | |
download | gcc-ab68a73ede62fbcbb3abd07879838ebe81fdd484.zip gcc-ab68a73ede62fbcbb3abd07879838ebe81fdd484.tar.gz gcc-ab68a73ede62fbcbb3abd07879838ebe81fdd484.tar.bz2 |
re PR fortran/54730 (ICE in gfc_typenode_for_spec, at fortran/trans-types.c:1066)
fortran/
PR fortran/54730
* gfortran.h (struct gfc_undo_change_set): New field 'previous'.
(gfc_new_undo_checkpoint, gfc_drop_last_undo_checkpoint,
gfc_restore_last_undo_checkpoint): New prototypes.
* symbol.c (default_undo_chgset_var): Update initialization.
(single_undo_checkpoint_p, gfc_new_undo_checkpoint,
free_undo_change_set_data, pop_undo_change_set,
gfc_drop_last_undo_checkpoint, enforce_single_undo_checkpoint):
New functions.
(save_symbol_data): Handle multiple change sets. Make sure old_symbol
field's previous value is not overwritten. Clear gfc_new field.
(restore_old_symbol): Restore previous old_symbol field.
(gfc_restore_last_undo_checkpoint): New function, using body renamed
from gfc_undo_symbols. Restore the previous change set as current one.
(gfc_undo_symbols): New body.
(gfc_commit_symbols, gfc_commit_symbol, gfc_enforce_clean_symbol_state):
Call enforce_single_undo_checkpoint.
(gfc_symbol_done_2): Ditto. Free change set data.
From-SVN: r196414
Diffstat (limited to 'gcc/fortran/gfortran.h')
-rw-r--r-- | gcc/fortran/gfortran.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index d6176db..18bbf79 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -1281,6 +1281,7 @@ struct gfc_undo_change_set { vec<gfc_symbol *> syms; vec<gfc_typebound_proc *> tbps; + gfc_undo_change_set *previous; }; @@ -2641,6 +2642,9 @@ int gfc_get_sym_tree (const char *, gfc_namespace *, gfc_symtree **, bool); int gfc_get_ha_symbol (const char *, gfc_symbol **); int gfc_get_ha_sym_tree (const char *, gfc_symtree **); +void gfc_new_undo_checkpoint (gfc_undo_change_set &); +void gfc_drop_last_undo_checkpoint (void); +void gfc_restore_last_undo_checkpoint (void); void gfc_undo_symbols (void); void gfc_commit_symbols (void); void gfc_commit_symbol (gfc_symbol *); |