]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[Ada] Error in instance on incomplete actual passed to formal incomplete type
authorGary Dismukes <dismukes@adacore.com>
Wed, 10 Mar 2021 23:35:58 +0000 (18:35 -0500)
committerPierre-Marie de Rodat <derodat@adacore.com>
Thu, 17 Jun 2021 14:32:14 +0000 (10:32 -0400)
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

index 2cd46895d28784c8121f64832b288563369903e8..06947e22878f45526a79df84835dc772392a6bd8 100644 (file)
@@ -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);