aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Dismukes <dismukes@adacore.com>2021-03-10 18:35:58 -0500
committerPierre-Marie de Rodat <derodat@adacore.com>2021-06-17 10:32:14 -0400
commit83a5b1df3da2d6c50efabdbf4767a32e80f0cab1 (patch)
treec818deead6432edd42dd41fd6d3da23e86bcb133
parentcad7431bd64325e1a30f868615aa04d01a472b01 (diff)
downloadgcc-83a5b1df3da2d6c50efabdbf4767a32e80f0cab1.zip
gcc-83a5b1df3da2d6c50efabdbf4767a32e80f0cab1.tar.gz
gcc-83a5b1df3da2d6c50efabdbf4767a32e80f0cab1.tar.bz2
[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.
-rw-r--r--gcc/ada/sem_ch12.adb8
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb
index 2cd4689..06947e2 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);