From: Gary Dismukes Date: Wed, 10 Mar 2021 23:35:58 +0000 (-0500) Subject: [Ada] Error in instance on incomplete actual passed to formal incomplete type X-Git-Tag: basepoints/gcc-13~6725 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=83a5b1df3da2d6c50efabdbf4767a32e80f0cab1;p=thirdparty%2Fgcc.git [Ada] Error in instance on incomplete actual passed to formal incomplete type gcc/ada/ * sem_ch12.adb (Instantiate_Type): If the actual type for an incomplete formal type is also incomplete, but has a Full_View, use the Full_View of the actual type rather than the incomplete view. --- diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb index 2cd46895d287..06947e22878f 100644 --- a/gcc/ada/sem_ch12.adb +++ b/gcc/ada/sem_ch12.adb @@ -14022,9 +14022,12 @@ package body Sem_Ch12 is and then Ekind (Root_Type (Act_T)) = E_Incomplete_Type) then -- If the formal is an incomplete type, the actual can be - -- incomplete as well. + -- incomplete as well, but if an actual incomplete type has + -- a full view, then we'll retrieve that. - if Ekind (A_Gen_T) = E_Incomplete_Type then + if Ekind (A_Gen_T) = E_Incomplete_Type + and then not Present (Full_View (Act_T)) + then null; elsif Is_Class_Wide_Type (Act_T) @@ -14032,6 +14035,7 @@ package body Sem_Ch12 is then Error_Msg_N ("premature use of incomplete type", Actual); Abandon_Instantiation (Actual); + else Act_T := Full_View (Act_T); Set_Entity (Actual, Act_T);