Commit f603c985 by Ed Schonberg Committed by Pierre-Marie de Rodat

[Ada] Spurious error private subtype derivation

This patch fixes a spurious error on a derived type declaration whose
subtype indication is a subtype of a private type whose full view is a
constrained discriminated type.

2019-07-01  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* 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.

gcc/testsuite/

	* gnat.dg/derived_type6.adb, gnat.dg/derived_type6.ads: New
	testcase.

From-SVN: r272879
parent 497ee82b
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
......
......@@ -8582,6 +8582,16 @@ package body Sem_Ch3 is
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>
......
-- { dg-do compile }
package body Derived_Type6 is
procedure Foo is null;
end Derived_Type6;
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;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment