From: Gary Dismukes Date: Mon, 4 Jul 2005 13:29:58 +0000 (+0200) Subject: sem_eval.adb (Subtypes_Statically_Match): Use the discriminant constraint of full... X-Git-Tag: misc/cutover-cvs2svn~1957 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c2bf339e6b769c71653b255148ae8386b19c229c;p=thirdparty%2Fgcc.git 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 * 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 --- diff --git a/gcc/ada/sem_eval.adb b/gcc/ada/sem_eval.adb index caa9153fd04c..396027d39b4a 100644 --- a/gcc/ada/sem_eval.adb +++ b/gcc/ada/sem_eval.adb @@ -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;