diff options
author | Marc Poulhiès <poulhies@adacore.com> | 2023-04-11 09:46:33 +0200 |
---|---|---|
committer | Marc Poulhiès <poulhies@adacore.com> | 2023-06-13 09:31:45 +0200 |
commit | 659aeb219401210220a521eccd6ad95620841245 (patch) | |
tree | b3ef39925d5a720939ab08be68a46ddd4ecda54c | |
parent | 5225a2b2ecd8e876f7a879f70bb74d563ab953cd (diff) | |
download | gcc-659aeb219401210220a521eccd6ad95620841245.zip gcc-659aeb219401210220a521eccd6ad95620841245.tar.gz gcc-659aeb219401210220a521eccd6ad95620841245.tar.bz2 |
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 <schonberg@adacore.com>
-rw-r--r-- | gcc/ada/sem_aggr.adb | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb index 3b2d034..843606a 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); |