+2019-07-01 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch3.adb (Build_Derived_Record_Type): If the parent type is
+ declared as a subtype of a private type with an inherited
+ discriminant constraint, its generated full base appears as a
+ record subtype, so we need to retrieve its oen base type so that
+ the inherited constraint can be applied to it.
+
2019-07-01 Yannick Moy <moy@adacore.com>
* sem_spark.adb: Completely rework the algorithm for ownership
Parent_Base := Base_Type (Parent_Type);
end if;
+ -- If the parent type is declared as a subtype of another private
+ -- type with inherited discriminants, its generated base type is
+ -- itself a record subtype. To further inherit the constraint we
+ -- need to use its own base to have an unconstrained type on which
+ -- to apply the inherited constraint.
+
+ if Ekind (Parent_Base) = E_Record_Subtype then
+ Parent_Base := Base_Type (Parent_Base);
+ end if;
+
-- AI05-0115: if this is a derivation from a private type in some
-- other scope that may lead to invisible components for the derived
-- type, mark it accordingly.
2019-07-01 Ed Schonberg <schonberg@adacore.com>
+ * gnat.dg/derived_type6.adb, gnat.dg/derived_type6.ads: New
+ testcase.
+
+2019-07-01 Ed Schonberg <schonberg@adacore.com>
+
* gnat.dg/weak3.adb, gnat.dg/weak3.ads: New testcase.
2019-07-01 Ed Schonberg <schonberg@adacore.com>
--- /dev/null
+-- { dg-do compile }
+
+package body Derived_Type6 is
+ procedure Foo is null;
+end Derived_Type6;
--- /dev/null
+with Ada.Strings.Bounded;
+
+package Derived_Type6 is
+ package b is new Ada.Strings.Bounded.Generic_Bounded_Length(10);
+ subtype s1 is b.Bounded_String;
+ type s2 is new s1;
+
+ procedure Foo;
+end Derived_Type6;