From 83a5b1df3da2d6c50efabdbf4767a32e80f0cab1 Mon Sep 17 00:00:00 2001 From: Gary Dismukes Date: Wed, 10 Mar 2021 18:35:58 -0500 Subject: [PATCH] [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. --- gcc/ada/sem_ch12.adb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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); -- 2.47.2