diff options
author | Gary Dismukes <dismukes@adacore.com> | 2021-03-10 18:35:58 -0500 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2021-06-17 10:32:14 -0400 |
commit | 83a5b1df3da2d6c50efabdbf4767a32e80f0cab1 (patch) | |
tree | c818deead6432edd42dd41fd6d3da23e86bcb133 /gcc | |
parent | cad7431bd64325e1a30f868615aa04d01a472b01 (diff) | |
download | gcc-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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/sem_ch12.adb | 8 |
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); |