Fix assembler name collision

Gigi uses a dummy global variable to register global types for debug
info purposes and its name can now collide with user variables.

gcc/ada/ChangeLog:
	* gcc-interface/trans.c (lvalue_for_aggregate_p): Also return true
	for return statements.
	* gcc-interface/utils.c (gnat_write_global_declarations): Use the
	maximum index for the dummy object to avoid a name collision.
This commit is contained in:
Eric Botcazou
2020-12-07 10:40:23 +01:00
parent 6fb8da750f
commit 6a1e04b2f0
2 changed files with 5 additions and 1 deletions
+4
View File
@@ -970,6 +970,10 @@ lvalue_for_aggregate_p (Node_Id gnat_node, tree gnu_type)
/* Even if the parameter is by copy, prefer an lvalue. */
return true;
case N_Simple_Return_Statement:
/* Likewise for a return value. */
return true;
case N_Indexed_Component:
case N_Selected_Component:
/* If an elementary component is used, take it from the constant. */
+1 -1
View File
@@ -5903,7 +5903,7 @@ gnat_write_global_declarations (void)
struct varpool_node *node;
char *label;
ASM_FORMAT_PRIVATE_NAME (label, first_global_object_name, 0);
ASM_FORMAT_PRIVATE_NAME (label, first_global_object_name, ULONG_MAX);
dummy_global
= build_decl (BUILTINS_LOCATION, VAR_DECL, get_identifier (label),
void_type_node);