[COMMITTED,28/30] ada: Fix internal error on nested aggregate in conditional expression

Message ID 20240520074858.222435-28-poulhies@adacore.com
State Committed
Commit bfa743ddc9fd1850a7cc282afe5f3101b544ac64
Series [COMMITTED,01/30] ada: Rework and augment documentation on strict aliasing |


Context Check Description
linaro-tcwg-bot/tcwg_gcc_build--master-arm fail Patch failed to apply
linaro-tcwg-bot/tcwg_gcc_build--master-aarch64 fail Patch failed to apply

Commit Message

Marc Poulhiès May 20, 2024, 7:48 a.m. UTC
  From: Eric Botcazou <ebotcazou@adacore.com>

This plugs a loophole in the change improving code generation for nested
aggregates present in conditional expressions: once the delayed expansion
is chosen for the nested aggregate, the expansion of the parent aggregate
cannot be left to the back-end and the test must be adjusted to implement
this in the presence of conditional expressions too.


	* exp_aggr.adb (Expand_Record_Aggregate.Component_OK_For_Backend):
	Also return False for a delayed conditional expression.

Tested on x86_64-pc-linux-gnu, committed on master.

 gcc/ada/exp_aggr.adb | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)


diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb
index a386aa85ae4..796b0f1e0de 100644
--- a/gcc/ada/exp_aggr.adb
+++ b/gcc/ada/exp_aggr.adb
@@ -8376,7 +8376,9 @@  package body Exp_Aggr is
                Static_Components := False;
                return False;
-            elsif Is_Delayed_Aggregate (Expr_Q) then
+            elsif Is_Delayed_Aggregate (Expr_Q)
+              or else Is_Delayed_Conditional_Expression (Expr_Q)
+            then
                Static_Components := False;
                return False;