From 0b8880428c4da92886b069af714365019f660ade Mon Sep 17 00:00:00 2001 From: Ed Schonberg Date: Mon, 26 Apr 2021 13:32:06 -0400 Subject: [PATCH] [Ada] Spurious error in instantiation with aggregate and private ancestor gcc/ada/ * sem_aggr.adb (Resolve_Record_Aggregate, Step_5): Do not check for the need to use an extension aggregate for a given component when within an instance and the type of the component hss a private ancestor: the instantiation is legal if the generic compiles, and spurious errors may be generated otherwise. --- gcc/ada/sem_aggr.adb | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb index d189ab7682dc..9ad96296dd4a 100644 --- a/gcc/ada/sem_aggr.adb +++ b/gcc/ada/sem_aggr.adb @@ -5028,12 +5028,19 @@ package body Sem_Aggr is Prepend_Elmt (Parent_Typ, To => Parent_Typ_List); Parent_Typ := Etype (Parent_Typ); + -- Check whether a private parent requires the use of + -- an extension aggregate. This test does not apply in + -- an instantiation: if the generic unit is legal so is + -- the instance. + if Nkind (Parent (Base_Type (Parent_Typ))) = N_Private_Type_Declaration or else Nkind (Parent (Base_Type (Parent_Typ))) = N_Private_Extension_Declaration then - if Nkind (N) /= N_Extension_Aggregate then + if Nkind (N) /= N_Extension_Aggregate + and then not In_Instance + then Error_Msg_NE ("type of aggregate has private ancestor&!", N, Parent_Typ); -- 2.47.2