From: Ed Schonberg Date: Thu, 11 Jun 2020 15:34:26 +0000 (-0400) Subject: [Ada] Spurious error in instance nested in formal package X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4dba8cd2a4aff54309bcfc25281381938c8c3604;p=thirdparty%2Fgcc.git [Ada] Spurious error in instance nested in formal package gcc/ada/ * sem_ch12.adb (Load_Parent_Of_Generic): If an ancestor is an instance whose source appears within a formal package of the current unit, there is no body of the ancestor needed to complete the current generic compilation. --- diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb index 4307111f0904..b3a4ad4d4683 100644 --- a/gcc/ada/sem_ch12.adb +++ b/gcc/ada/sem_ch12.adb @@ -14292,6 +14292,21 @@ package body Sem_Ch12 is exit; + -- If an ancestor of the generic comes from a formal package + -- there is no source for the ancestor body. This is detected + -- by examining the scope of the ancestor and its declaration. + -- The body, if any is needed, will be available when the + -- current unit (containing a formal package) is instantiated. + + elsif Nkind (True_Parent) = N_Package_Specification + and then Present (Generic_Parent (True_Parent)) + and then Nkind + (Original_Node (Unit_Declaration_Node + (Scope (Generic_Parent (True_Parent))))) + = N_Formal_Package_Declaration + then + return; + else True_Parent := Parent (True_Parent); end if;