aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPiotr Trojanek <trojanek@adacore.com>2021-02-17 23:32:25 +0100
committerPierre-Marie de Rodat <derodat@adacore.com>2021-06-16 04:42:58 -0400
commitc50041b99bc621cc1e2c7b7dbb67c0600926072e (patch)
tree9cecd021617db28ba14155d4451dad4c0803d757 /gcc
parent331170392082ccfb782a6edb263fc2a32d058c70 (diff)
downloadgcc-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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/sem_ch13.adb25
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;