re PR ada/8358 (Ada accesses freed memory)
PR ada/8358 * trans.c (gnu_pending_elaboration_lists): New GC root. (build_unit_elab): Use.. From-SVN: r58804
This commit is contained in:
parent
72040fcbf6
commit
1c7b0712bc
@ -1,3 +1,8 @@
|
||||
2002-11-05 Graham Stott <graham.stott@btinternet.com>
|
||||
PR ada/8358
|
||||
* trans.c (gnu_pending_elaboration_lists): New GC root.
|
||||
(build_unit_elab): Use..
|
||||
|
||||
2002-10-30 Geert Bosch <bosch@gnat.com>
|
||||
PR ada/6558
|
||||
* misc.c : Include optabs.h
|
||||
|
@ -88,6 +88,10 @@ tree gnu_block_stack;
|
||||
handler. Not used in the zero-cost case. */
|
||||
static GTY(()) tree gnu_except_ptr_stack;
|
||||
|
||||
/* List of TREE_LIST nodes containing pending elaborations lists.
|
||||
used to prevent the elaborations being reclaimed by GC. */
|
||||
static GTY(()) tree gnu_pending_elaboration_lists;
|
||||
|
||||
/* Map GNAT tree codes to GCC tree codes for simple expressions. */
|
||||
static enum tree_code gnu_codes[Number_Node_Kinds];
|
||||
|
||||
@ -5298,6 +5302,10 @@ build_unit_elab (gnat_unit, body_p, gnu_elab_list)
|
||||
if (gnu_elab_list == 0)
|
||||
return 1;
|
||||
|
||||
/* Prevent the elaboration list from being reclaimed by the GC. */
|
||||
gnu_pending_elaboration_lists = chainon (gnu_pending_elaboration_lists,
|
||||
gnu_elab_list);
|
||||
|
||||
/* Set our file and line number to that of the object and set up the
|
||||
elaboration routine. */
|
||||
gnu_decl = create_subprog_decl (create_concat_name (gnat_unit,
|
||||
@ -5358,6 +5366,9 @@ build_unit_elab (gnat_unit, body_p, gnu_elab_list)
|
||||
gnu_block_stack = TREE_CHAIN (gnu_block_stack);
|
||||
end_subprog_body ();
|
||||
|
||||
/* We are finished with the elaboration list it can now be discarded. */
|
||||
gnu_pending_elaboration_lists = TREE_CHAIN (gnu_pending_elaboration_lists);
|
||||
|
||||
/* If there were no insns, we don't need an elab routine. It would
|
||||
be nice to not output this one, but there's no good way to do that. */
|
||||
return result;
|
||||
|
Loading…
Reference in New Issue
Block a user