diff options
author | Bob Duff <duff@adacore.com> | 2020-05-16 11:59:50 -0400 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2020-07-08 10:55:49 -0400 |
commit | 3452f4b72db6630ab80cb16d8cff2a5e531f4820 (patch) | |
tree | eca653f573b3180f1db22fb49608d87069ed2b35 /gcc | |
parent | 19036072c6f7db967a3ecd1b2f3b9440ddbd68d4 (diff) | |
download | gcc-3452f4b72db6630ab80cb16d8cff2a5e531f4820.zip gcc-3452f4b72db6630ab80cb16d8cff2a5e531f4820.tar.gz gcc-3452f4b72db6630ab80cb16d8cff2a5e531f4820.tar.bz2 |
[Ada] Check predicates for subtypes of private types
gcc/ada/
* sem_ch13.adb (Analyze_Aspect_Specifications): Add freeze node
for the Underlying_Full_View if it exists. The freeze node is
what triggers the generation of the predicate function.
* freeze.adb: Minor reformatting.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/freeze.adb | 7 | ||||
-rw-r--r-- | gcc/ada/sem_ch13.adb | 15 |
2 files changed, 17 insertions, 5 deletions
diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index 7c6fac1..cb32f9d 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -6175,8 +6175,7 @@ package body Freeze is if Present (F_Node) then Inherit_Freeze_Node - (Fnod => F_Node, - Typ => Full_View (E)); + (Fnod => F_Node, Typ => Full_View (E)); else Set_Has_Delayed_Freeze (Full_View (E), False); Set_Freeze_Node (Full_View (E), Empty); @@ -6187,9 +6186,7 @@ package body Freeze is F_Node := Freeze_Node (Full_View (E)); if Present (F_Node) then - Inherit_Freeze_Node - (Fnod => F_Node, - Typ => E); + Inherit_Freeze_Node (Fnod => F_Node, Typ => E); else -- {Incomplete,Private}_Subtypes with Full_Views -- constrained by discriminants. diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index f854711..4c8c650 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -3051,6 +3051,21 @@ package body Sem_Ch13 is Set_Has_Delayed_Aspects (Full_View (E)); Ensure_Freeze_Node (Full_View (E)); + + -- If there is an Underlying_Full_View, also create a + -- freeze node for that one. + + if Is_Private_Type (Full_View (E)) then + declare + U_Full : constant Entity_Id := + Underlying_Full_View (Full_View (E)); + begin + if Present (U_Full) then + Set_Has_Delayed_Aspects (U_Full); + Ensure_Freeze_Node (U_Full); + end if; + end; + end if; end if; -- Predicate_Failure |