diff options
author | Piotr Trojanek <trojanek@adacore.com> | 2021-02-17 23:32:25 +0100 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2021-06-16 04:42:58 -0400 |
commit | c50041b99bc621cc1e2c7b7dbb67c0600926072e (patch) | |
tree | 9cecd021617db28ba14155d4451dad4c0803d757 | |
parent | 331170392082ccfb782a6edb263fc2a32d058c70 (diff) | |
download | gcc-c50041b99bc621cc1e2c7b7dbb67c0600926072e.zip gcc-c50041b99bc621cc1e2c7b7dbb67c0600926072e.tar.gz gcc-c50041b99bc621cc1e2c7b7dbb67c0600926072e.tar.bz2 |
[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.
-rw-r--r-- | gcc/ada/sem_ch13.adb | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index a9770db..8aa62c8 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -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; |