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: https://git.libre-soc.org/?a=commitdiff_plain;h=875a00faca1e15e72aca02c323c0459b50d96b89;p=gcc.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 4307111f090..b3a4ad4d468 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;