aboutsummaryrefslogtreecommitdiff
path: root/gcc/sched-int.h
diff options
context:
space:
mode:
authorMikael Morin <mikael@gcc.gnu.org>2015-10-18 17:17:21 +0000
committerMikael Morin <mikael@gcc.gnu.org>2015-10-18 17:17:21 +0000
commita70ba41f41bca6d1965e617686ab02fc6eb42c5f (patch)
tree825f09b858c7489a7824b502280e56fef764f000 /gcc/sched-int.h
parent45c3fea9baf7690791680ad24eacc01376b6dbd3 (diff)
downloadgcc-a70ba41f41bca6d1965e617686ab02fc6eb42c5f.zip
gcc-a70ba41f41bca6d1965e617686ab02fc6eb42c5f.tar.gz
gcc-a70ba41f41bca6d1965e617686ab02fc6eb42c5f.tar.bz2
Fix common-related error recovery ICE.
Fix an inconsistent state, between the in_common attribute and the common_block pointer. - adding a symbol to a common block list in gfc_match_common is delayed after the call to gfc_add_in_common. - gfc_restore_latest_undo_checkpoint is changed to check the common_block pointer directly instead of the in_common attribute. - gfc_restore_old_symbol is changed to also restore the common-related pointers. This is done using a new function created to factor the related memory management. - In gfc_restore_last_undo_checkpoint, when a symbol has been removed from the common block linked list, its common_next pointer is cleared. PR fortran/67758 gcc/fortran/ * gfortran.h (gfc_symbol): Expand comment. * match.c (gfc_match_common): Delay adding the symbol to the common_block after the gfc_add_in_common call. * symbol.c (gfc_free_symbol): Move common block memory handling... (gfc_set_symbol_common_block): ... here as a new function. (restore_old_symbol): Restore common block fields. (gfc_restore_last_undo_checkpoint): Check the common_block pointer instead of the in_common attribute. When a symbol has been removed from the common block linked list, clear its common_next pointer. gcc/testsuite/ * gfortran.dg/common_25.f90: New file. From-SVN: r228947
Diffstat (limited to 'gcc/sched-int.h')
0 files changed, 0 insertions, 0 deletions