Compiler aborts on an aggregate for a discriminated out_parameter when
the parent type has dynamic_predicates.

Tested on x86_64-pc-linux-gnu, committed on trunk

gcc/ada/

        * sem_util.adb (Build_Constrained_Itype): Inhibit the generation
        of predicate functions for this Itype, which is created for an
        aggregate of a discriminated type. The object to which the
        aggregate is assigned, e.g a writable actual parameter, will
        apply the predicates if any are inherited from the base type.
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -2380,6 +2380,14 @@ package body Sem_Util is
 
       Analyze (Subtyp_Decl, Suppress => All_Checks);
 
+      --  In addition, inhibit the generation of predicate functions for
+      --  this subtype, because its declaration is not in a declarative
+      --  list, and no predicates apply to the aggregate itself, but only
+      --  to the object to which it may be assigned.
+
+      Set_Has_Dynamic_Predicate_Aspect (Def_Id, False);
+      Set_Has_Predicates (Def_Id, False);
+
       Set_Etype (N, Def_Id);
    end Build_Constrained_Itype;
 


Reply via email to