sem_eval.adb (Subtypes_Statically_Match): Use the discriminant constraint of full view of a private view T1 if present...

2005-07-04  Gary Dismukes  <dismukes@adacore.com>

	* sem_eval.adb (Subtypes_Statically_Match): Use the discriminant
	constraint of full view of a private view T1 if present, when T2 is a
	discriminated full view.

From-SVN: r101589
This commit is contained in:
Gary Dismukes 2005-07-04 15:29:58 +02:00 committed by Arnaud Charlet
parent 9dcb52e145
commit c2bf339e6b
1 changed files with 22 additions and 7 deletions

View File

@ -3927,15 +3927,30 @@ package body Sem_Eval is
elsif Has_Discriminants (T1) or else Has_Discriminants (T2) then
-- We really need comments here ???
-- Because of view exchanges in multiple instantiations, conformance
-- checking might try to match a partial view of a type with no
-- discriminants with a full view that has defaulted discriminants.
-- In such a case, use the discriminant constraint of the full view,
-- which must exist because we know that the two subtypes have the
-- same base type.
if Has_Discriminants (T1) /= Has_Discriminants (T2) then
if In_Instance
and then Is_Private_Type (T2)
and then Present (Full_View (T2))
and then Has_Discriminants (Full_View (T2))
then
return Subtypes_Statically_Match (T1, Full_View (T2));
if In_Instance then
if Is_Private_Type (T2)
and then Present (Full_View (T2))
and then Has_Discriminants (Full_View (T2))
then
return Subtypes_Statically_Match (T1, Full_View (T2));
elsif Is_Private_Type (T1)
and then Present (Full_View (T1))
and then Has_Discriminants (Full_View (T1))
then
return Subtypes_Statically_Match (Full_View (T1), T2);
else
return False;
end if;
else
return False;
end if;