[gcc(refs/users/guojiufu/heads/personal-branch)] [Ada] Add another ad-hoc case to the Has_Private_View mechanism
Jiu Fu Guo
guojiufu@gcc.gnu.org
Wed Jun 10 03:33:21 GMT 2020
https://gcc.gnu.org/g:8b3bf48a31e4eb238ae8bd61b9ff9d4c6abb932e
commit 8b3bf48a31e4eb238ae8bd61b9ff9d4c6abb932e
Author: Eric Botcazou <ebotcazou@adacore.com>
Date: Sun Jan 19 18:25:37 2020 +0100
[Ada] Add another ad-hoc case to the Has_Private_View mechanism
2020-06-04 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* sem_ch12.adb (Copy_Generic_Node): Add special handling for a
conversion between access types.
Diff:
---
gcc/ada/sem_ch12.adb | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb
index 23ee796b455..49a8720b482 100644
--- a/gcc/ada/sem_ch12.adb
+++ b/gcc/ada/sem_ch12.adb
@@ -7900,6 +7900,37 @@ package body Sem_Ch12 is
Sloc (N)));
end if;
end;
+
+ -- Here is a similar case, for the Designated_Type of an
+ -- access type that is present as target type in a type
+ -- conversion from another access type. In this case, if
+ -- the base types of the designated types are different
+ -- and the conversion was accepted during the semantic
+ -- analysis of the generic, this means that the target
+ -- type cannot have been private (see Valid_Conversion).
+
+ elsif Nkind (Assoc) = N_Identifier
+ and then Nkind (Parent (Assoc)) = N_Type_Conversion
+ and then Subtype_Mark (Parent (Assoc)) = Assoc
+ and then Is_Access_Type (Etype (Assoc))
+ and then Present (Etype (Expression (Parent (Assoc))))
+ and then
+ Is_Access_Type (Etype (Expression (Parent (Assoc))))
+ then
+ declare
+ Targ_Desig : constant Entity_Id :=
+ Designated_Type (Etype (Assoc));
+ Expr_Desig : constant Entity_Id :=
+ Designated_Type
+ (Etype (Expression (Parent (Assoc))));
+ begin
+ if Base_Type (Targ_Desig) /= Base_Type (Expr_Desig)
+ and then Is_Private_Type (Targ_Desig)
+ then
+ Check_Private_View
+ (New_Occurrence_Of (Targ_Desig, Sloc (N)));
+ end if;
+ end;
end if;
-- The node is a reference to a global type and acts as the
More information about the Gcc-cvs
mailing list