This can result on the mainline in a segfault when an object declared at
library level is used in the declaration of another, local object.
Tested on x86_64-suse-linux, applied on the mainline.
2020-09-12 Eric Botcazou <ebotca...@adacore.com>
* gcc-interface/trans.c (lvalue_for_aggr_p) <N_Object_Declaration>:
Return false unconditionally.
--
Eric Botcazou
diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c
index aa4393c24b7..39d4d28fa67 100644
--- a/gcc/ada/gcc-interface/trans.c
+++ b/gcc/ada/gcc-interface/trans.c
@@ -968,12 +968,8 @@ lvalue_for_aggregate_p (Node_Id gnat_node, tree gnu_type)
get_unpadded_type (Etype (gnat_parent)));
case N_Object_Declaration:
- /* For an aggregate object declaration, return the constant at top level
- in order to avoid generating elaboration code. */
- if (global_bindings_p ())
- return false;
-
- /* ... fall through ... */
+ /* For an aggregate object declaration, return false consistently. */
+ return false;
case N_Assignment_Statement:
/* For an aggregate assignment, decide based on the size. */