From a22b794dcaf672c349b95652d975f7cf3c88a9ee Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Fri, 26 Jun 2015 10:21:54 +0000 Subject: [PATCH] gigi.h (note_types_used_by_globals): Delete. * gcc-interface/gigi.h (note_types_used_by_globals): Delete. (gnat_write_global_declarations): New prototype. * gcc-interface/utils.c (type_decls): Rename back to... (global_decls): ...this. (gnat_pushdecls): Revert previous change. (create_var_decl): Do not output global variables. (note_types_used_by_globals): Rename back to... (gnat_write_global_declarations): ...this. Output variables on the global_decls vector. * gcc-interface/misc.c (gnat_parse_file): Adjust to above renaming. From-SVN: r225003 --- gcc/ada/ChangeLog | 13 ++++++++++ gcc/ada/gcc-interface/gigi.h | 5 ++-- gcc/ada/gcc-interface/misc.c | 3 ++- gcc/ada/gcc-interface/utils.c | 49 ++++++++++++++++------------------- 4 files changed, 40 insertions(+), 30 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index a58c80f39ad..943395e99a8 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,16 @@ +2015-06-26 Eric Botcazou + + * gcc-interface/gigi.h (note_types_used_by_globals): Delete. + (gnat_write_global_declarations): New prototype. + * gcc-interface/utils.c (type_decls): Rename back to... + (global_decls): ...this. + (gnat_pushdecls): Revert previous change. + (create_var_decl): Do not output global variables. + (note_types_used_by_globals): Rename back to... + (gnat_write_global_declarations): ...this. Output variables on the + global_decls vector. + * gcc-interface/misc.c (gnat_parse_file): Adjust to above renaming. + 2015-06-26 Eric Botcazou * gcc-interface/gigi.h (create_var_decl_1): Rename into... diff --git a/gcc/ada/gcc-interface/gigi.h b/gcc/ada/gcc-interface/gigi.h index 4f95d3f77e5..67977b01f87 100644 --- a/gcc/ada/gcc-interface/gigi.h +++ b/gcc/ada/gcc-interface/gigi.h @@ -531,9 +531,8 @@ extern tree gnat_type_for_size (unsigned precision, int unsignedp); an unsigned type; otherwise a signed type is returned. */ extern tree gnat_type_for_mode (machine_mode mode, int unsignedp); -/* Keep track of types used at the global level and emit debug info - for all global types. */ -extern void note_types_used_by_globals (void); +/* Perform final processing on global declarations. */ +extern void gnat_write_global_declarations (void); /* Return the unsigned version of a TYPE_NODE, a scalar type. */ extern tree gnat_unsigned_type (tree type_node); diff --git a/gcc/ada/gcc-interface/misc.c b/gcc/ada/gcc-interface/misc.c index bb11ce49b83..2f397ba1fe7 100644 --- a/gcc/ada/gcc-interface/misc.c +++ b/gcc/ada/gcc-interface/misc.c @@ -113,7 +113,8 @@ gnat_parse_file (void) /* Call the front end. */ _ada_gnat1drv (); - note_types_used_by_globals (); + /* Write the global declarations. */ + gnat_write_global_declarations (); } /* Return language mask for option processing. */ diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c index b32bc892fa5..e4b0ebac320 100644 --- a/gcc/ada/gcc-interface/utils.c +++ b/gcc/ada/gcc-interface/utils.c @@ -218,8 +218,8 @@ static GTY((deletable)) struct gnat_binding_level *free_binding_level; /* The context to be used for global declarations. */ static GTY(()) tree global_context; -/* An array of global type declarations. */ -static GTY(()) vec *type_decls; +/* An array of global declarations. */ +static GTY(()) vec *global_decls; /* An array of builtin function declarations. */ static GTY(()) vec *builtin_decls; @@ -753,10 +753,7 @@ gnat_pushdecl (tree decl, Node_Id gnat_node) vec_safe_push (builtin_decls, decl); } else if (global_bindings_p ()) - { - if (TREE_CODE (decl) == TYPE_DECL) - vec_safe_push (type_decls, decl); - } + vec_safe_push (global_decls, decl); else { DECL_CHAIN (decl) = BLOCK_VARS (current_binding_level->block); @@ -2439,19 +2436,13 @@ create_var_decl (tree name, tree asm_name, tree type, tree init, /* Add this decl to the current binding level. */ gnat_pushdecl (var_decl, gnat_node); - if (TREE_CODE (var_decl) == VAR_DECL) + if (TREE_CODE (var_decl) == VAR_DECL && asm_name) { - if (asm_name) - { - /* Let the target mangle the name if this isn't a verbatim asm. */ - if (*IDENTIFIER_POINTER (asm_name) != '*') - asm_name = targetm.mangle_decl_assembler_name (var_decl, asm_name); - - SET_DECL_ASSEMBLER_NAME (var_decl, asm_name); - } + /* Let the target mangle the name if this isn't a verbatim asm. */ + if (*IDENTIFIER_POINTER (asm_name) != '*') + asm_name = targetm.mangle_decl_assembler_name (var_decl, asm_name); - if (global_bindings_p ()) - rest_of_decl_compilation (var_decl, true, 0); + SET_DECL_ASSEMBLER_NAME (var_decl, asm_name); } return var_decl; @@ -5200,13 +5191,12 @@ smaller_form_type_p (tree type, tree orig_type) return tree_int_cst_lt (size, osize) != 0; } -/* Keep track of types used at the global level and emit debug info - for all global types. */ +/* Perform final processing on global declarations. */ static GTY (()) tree dummy_global; void -note_types_used_by_globals (void) +gnat_write_global_declarations (void) { unsigned int i; tree iter; @@ -5235,13 +5225,20 @@ note_types_used_by_globals (void) } } - /* Output debug information for all global type declarations. This ensures - that global types whose compilation cannot been finalized earlier, e.g. - pointers to Taft amendment types, have their compilation finalized in - the right context. */ - FOR_EACH_VEC_SAFE_ELT (type_decls, i, iter) - if (!DECL_IGNORED_P (iter)) + /* Output debug information for all global type declarations first. This + ensures that global types whose compilation hasn't been finalized yet, + for example pointers to Taft amendment types, have their compilation + finalized in the right context. */ + FOR_EACH_VEC_SAFE_ELT (global_decls, i, iter) + if (TREE_CODE (iter) == TYPE_DECL && !DECL_IGNORED_P (iter)) debug_hooks->type_decl (iter, false); + + /* Then output the global variables. We need to do that after the debug + information is emitted above so that "forward" type declarations are + properly merged with their definition in the debug information. */ + FOR_EACH_VEC_SAFE_ELT (global_decls, i, iter) + if (TREE_CODE (iter) == VAR_DECL) + rest_of_decl_compilation (iter, true, 0); } /* ************************************************************************ -- 2.30.2