From 3e65b68dd67e45ae54aa47f41a1f8a8d8296cf26 Mon Sep 17 00:00:00 2001 From: Piotr Trojanek Date: Mon, 28 Sep 2020 15:05:38 +0200 Subject: [PATCH] [Ada] Fix resolution of subtype_indication in delta aggregates gcc/ada/ * sem_aggr.adb (Resolve_Delta_Array_Aggregate): If the choice is a subtype_indication then call Resolve_Discrete_Subtype_Indication; both for choices immediately inside array delta aggregates and inside iterated_component_association within array delta aggregates. --- gcc/ada/sem_aggr.adb | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb index 3f96139e322..1ba58701f03 100644 --- a/gcc/ada/sem_aggr.adb +++ b/gcc/ada/sem_aggr.adb @@ -3072,6 +3072,10 @@ package body Sem_Aggr is Error_Msg_N ("others not allowed in delta aggregate", Choice); + elsif Nkind (Choice) = N_Subtype_Indication then + Resolve_Discrete_Subtype_Indication + (Choice, Base_Type (Index_Type)); + else Analyze_And_Resolve (Choice, Index_Type); end if; @@ -3109,28 +3113,31 @@ package body Sem_Aggr is else Choice := First (Choice_List (Assoc)); while Present (Choice) loop + Analyze (Choice); + if Nkind (Choice) = N_Others_Choice then Error_Msg_N ("others not allowed in delta aggregate", Choice); - else - Analyze (Choice); + elsif Is_Entity_Name (Choice) + and then Is_Type (Entity (Choice)) + then + -- Choice covers a range of values - if Is_Entity_Name (Choice) - and then Is_Type (Entity (Choice)) + if Base_Type (Entity (Choice)) /= + Base_Type (Index_Type) then - -- Choice covers a range of values - - if Base_Type (Entity (Choice)) /= - Base_Type (Index_Type) - then - Error_Msg_NE - ("choice does not match index type of &", - Choice, Typ); - end if; - else - Resolve (Choice, Index_Type); + Error_Msg_NE + ("choice does not match index type of &", + Choice, Typ); end if; + + elsif Nkind (Choice) = N_Subtype_Indication then + Resolve_Discrete_Subtype_Indication + (Choice, Base_Type (Index_Type)); + + else + Resolve (Choice, Index_Type); end if; Next (Choice); -- 2.30.2