Version 1.1 of ai05s/ai05-0282-1.txt
!standard 4.3.2(8) 11-11-08 AI12-0008-1/01
!class binding interpretation 11-11-08
!status work item 11-11-08
!status received 11-09-26
!priority Low
!difficulty Easy
!qualifier Omission
!subject Bad ancestor constraints for extension aggregates
!summary
** TBD.
!question
4.3.2(8) does not seem to apply if the ancestor is constrained.
Consider:
procedure Foo is
type Root (D : natural) is tagged record
F1 : String (1 .. D) := (others => 'x');
end record;
subtype S1 is Root (1);
subtype S2 is Root (2);
type Ext is new S1 with record F2 : Integer; end record;
Var : Ext := (S2 with F2 => 123);
begin
null;
end Foo;
One would hope that this would raise Constraint_Error, but nothing seems to
have that effect.
!recommendation
** TBD.
!wording
** TBD.
!discussion
Perhaps a static matching rule would be better if the target type
is constrained??
!ACATS Test
!ASIS
!appendix
From: Steve Baird
Sent: Monday, September 26, 2011 5:28 PM
The following example obviously should raise Constraint_Error
(assuming that it is not rejected at compile time - one could
imagine adding some sort of "statically matching subtype"
legality rule, but that seems outside the scope of this discussion):
procedure Foo is
type Root (D : natural) is tagged record
F1 : String (1 .. D) := (others => 'x');
end record;
subtype S1 is Root (1);
subtype S2 is Root (2);
type Ext is new S1 with record F2 : Integer; end record;
Var : Ext := (S2 with F2 => 123);
begin
null;
end Foo;
It seems that the present RM wording fails to capture this intent.
Note that 4.3.2(8) does not apply because it begins with
"If the type of the ancestor_part has discriminants that are not
inherited by the type of the extension_aggregate, ..."
Perhaps this condition needs to be expanded to include the case of
inherited discriminants and a constrained ancestor subtype_mark.
****************************************************************
Questions? Ask the ACAA Technical Agent