aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/sem_ch13.adb
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/sem_ch13.adb')
-rw-r--r--gcc/ada/sem_ch13.adb16
1 files changed, 15 insertions, 1 deletions
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
index efa2709..ad9e9a1 100644
--- a/gcc/ada/sem_ch13.adb
+++ b/gcc/ada/sem_ch13.adb
@@ -11114,13 +11114,27 @@ package body Sem_Ch13 is
-- If we have a type with predicates, build predicate function. This is
-- not needed in the generic case, nor within TSS subprograms and other
- -- predefined primitives.
+ -- predefined primitives. For a derived type, ensure that the parent
+ -- type is already frozen so that its predicate function has been
+ -- constructed already. This is necessary if the parent is declared
+ -- in a nested package and its own freeze point has not been reached.
if Is_Type (E)
and then Nongeneric_Case
and then not Within_Internal_Subprogram
and then Has_Predicates (E)
then
+ declare
+ Atyp : constant Entity_Id := Nearest_Ancestor (E);
+ begin
+ if Present (Atyp)
+ and then Has_Predicates (Atyp)
+ and then not Is_Frozen (Atyp)
+ then
+ Freeze_Before (N, Atyp);
+ end if;
+ end;
+
Build_Predicate_Functions (E, N);
end if;