From: Viljar Indus <in...@adacore.com> When dealing with a container aggregate with an iterator specification the iterator should take the value of the element of the container instead of the key.
gcc/ada/ * sem_aggr.adb (Resolve_Iterated_Association): Use the element type for the iterator in a container aggregate with an iterator specification. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/sem_aggr.adb | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb index 5bfbde5052b..ecd508a66f8 100644 --- a/gcc/ada/sem_aggr.adb +++ b/gcc/ada/sem_aggr.adb @@ -3228,6 +3228,8 @@ package body Sem_Aggr is Analyze_And_Resolve (New_Copy_Tree (Key_Expr), Key_Type); End_Scope; + Typ := Key_Type; + elsif Present (Iterator_Specification (Comp)) then Copy := Copy_Separate_Tree (Iterator_Specification (Comp)); Id_Name := @@ -3252,7 +3254,7 @@ package body Sem_Aggr is elsif Present (Key_Type) then Analyze_And_Resolve (Choice, Key_Type); - + Typ := Key_Type; else Typ := Etype (Choice); -- assume unique for now end if; @@ -3282,12 +3284,8 @@ package body Sem_Aggr is Enter_Name (Id); - if No (Key_Type) then - pragma Assert (Present (Typ)); - Set_Etype (Id, Typ); - else - Set_Etype (Id, Key_Type); - end if; + pragma Assert (Present (Typ)); + Set_Etype (Id, Typ); Mutate_Ekind (Id, E_Variable); Set_Is_Not_Self_Hidden (Id); -- 2.40.0