Fix small inconsistency in new predicate
authorEric Botcazou <ebotcazou@adacore.com>
Sat, 12 Sep 2020 10:47:39 +0000 (12:47 +0200)
committerEric Botcazou <ebotcazou@adacore.com>
Sat, 12 Sep 2020 10:47:39 +0000 (12:47 +0200)
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.

gcc/ada/ChangeLog:
* gcc-interface/trans.c (lvalue_for_aggr_p) <N_Object_Declaration>:
Return false unconditionally.

gcc/ada/gcc-interface/trans.c

index aa4393c24b73422608da9c4efd468bdf18f34f92..39d4d28fa67ba8c522cba3607b291697e07ff663 100644 (file)
@@ -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.  */