[Ada] Reorder code for validity checks of unchecked conversions

gcc/ada/

	* sem_ch13.adb (Validate_Unchecked_Conversion): Move detection
	of generic types before switching to their private views; fix
	style in using AND THEN.
This commit is contained in:
Piotr Trojanek 2021-02-17 23:32:25 +01:00 committed by Pierre-Marie de Rodat
parent 3311703920
commit c50041b99b

View File

@ -16578,18 +16578,7 @@ package body Sem_Ch13 is
-- here because the processing for generic instantiation always makes
-- subtypes, and we want the original frozen actual types.
-- If we are dealing with private types, then do the check on their
-- fully declared counterparts if the full declarations have been
-- encountered (they don't have to be visible, but they must exist).
Source := Ancestor_Subtype (Etype (First_Formal (Act_Unit)));
if Is_Private_Type (Source)
and then Present (Underlying_Type (Source))
then
Source := Underlying_Type (Source);
end if;
Target := Ancestor_Subtype (Etype (Act_Unit));
-- If either type is generic, the instantiation happens within a generic
@ -16600,6 +16589,16 @@ package body Sem_Ch13 is
return;
end if;
-- If we are dealing with private types, then do the check on their
-- fully declared counterparts if the full declarations have been
-- encountered (they don't have to be visible, but they must exist).
if Is_Private_Type (Source)
and then Present (Underlying_Type (Source))
then
Source := Underlying_Type (Source);
end if;
if Is_Private_Type (Target)
and then Present (Underlying_Type (Target))
then
@ -16692,8 +16691,8 @@ package body Sem_Ch13 is
-- in the same unit as the unchecked conversion, then set the flag
-- No_Strict_Aliasing (no strict aliasing is implicit here)
if Is_Access_Type (Target) and then
In_Same_Source_Unit (Target, N)
if Is_Access_Type (Target)
and then In_Same_Source_Unit (Target, N)
then
Set_No_Strict_Aliasing (Implementation_Base_Type (Target));
end if;