From: Marc Poulhiès Date: Tue, 11 Apr 2023 07:46:33 +0000 (+0200) Subject: ada: Fix iterated component initialization X-Git-Tag: basepoints/gcc-15~8372 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=659aeb219401210220a521eccd6ad95620841245;p=thirdparty%2Fgcc.git ada: Fix iterated component initialization The call to Resolve_Aggr_Expr may leave references to temporary entities used to check for the construct legality and meant to be removed. Using Preanalyze_And_Resolve correctly guarantees that there is no visible occurrence of such entities. gcc/ada/ * sem_aggr.adb (Resolve_Iterated_Component_Association): Call Preanalyze_And_Resolve instead of Resolve_Aggr_Expr except for aggregate. Co-authored-by: Ed Schonberg --- diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb index 3b2d0347b41b..843606ab4a19 100644 --- a/gcc/ada/sem_aggr.adb +++ b/gcc/ada/sem_aggr.adb @@ -1862,9 +1862,14 @@ package body Sem_Aggr is Expr := Expression (N); - Expander_Mode_Save_And_Set (False); - Dummy := Resolve_Aggr_Expr (Expr, Single_Elmt => False); - Expander_Mode_Restore; + if Nkind (Expr) = N_Aggregate then + -- If the expression is an aggregate, this is a multidimensional + -- aggregate where the component type must be propagated downward. + + Dummy := Resolve_Aggr_Expr (Expr, Single_Elmt => False); + else + Preanalyze_And_Resolve (Expr, Component_Typ); + end if; if Operating_Mode /= Check_Semantics then Remove_References (Expr);