diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2020-01-16 16:53:39 +0100 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2020-06-03 06:01:47 -0400 |
commit | dca8f39d62c4e9d54016a5f86c09906408b58e4e (patch) | |
tree | 121d2056eba91d0dbc2e02d869ee3098b7178f6a | |
parent | 3f06f6c30a8c168388886c13785597e56b398981 (diff) | |
download | gcc-dca8f39d62c4e9d54016a5f86c09906408b58e4e.zip gcc-dca8f39d62c4e9d54016a5f86c09906408b58e4e.tar.gz gcc-dca8f39d62c4e9d54016a5f86c09906408b58e4e.tar.bz2 |
[Ada] Small housekeeping work in Check_Private_View
2020-06-03 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* sem_ch12.adb (Check_Private_View): Clean up implementation of
second main case, when the generic sees the private declaration.
-rw-r--r-- | gcc/ada/sem_ch12.adb | 28 |
1 files changed, 9 insertions, 19 deletions
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb index be46867..71e1212 100644 --- a/gcc/ada/sem_ch12.adb +++ b/gcc/ada/sem_ch12.adb @@ -7431,35 +7431,25 @@ package body Sem_Ch12 is and then Present (Full_View (T)) and then not In_Open_Scopes (Scope (T)) then - -- In the generic, the full type was visible. Save the private - -- entity, for subsequent exchange. + -- In the generic, the full declaration was visible Switch_View (T); elsif Has_Private_View (N) and then not Is_Private_Type (T) and then not Has_Been_Exchanged (T) - and then Etype (Get_Associated_Node (N)) /= T + and then (not In_Open_Scopes (Scope (T)) + or else Nkind (Parent (N)) = N_Subtype_Declaration) then - -- Only the private declaration was visible in the generic. If - -- the type appears in a subtype declaration, the subtype in the + -- In the generic, only the private declaration was visible + + -- If the type appears in a subtype declaration, the subtype in -- instance must have a view compatible with that of its parent, -- which must be exchanged (see corresponding code in Restore_ - -- Private_Views). Otherwise, if the type is defined in a parent - -- unit, leave full visibility within instance, which is safe. - - if In_Open_Scopes (Scope (Base_Type (T))) - and then not Is_Private_Type (Base_Type (T)) - and then Comes_From_Source (Base_Type (T)) - then - null; + -- Private_Views) so we make an exception to the open scope rule. - elsif Nkind (Parent (N)) = N_Subtype_Declaration - or else not In_Private_Part (Scope (Base_Type (T))) - then - Prepend_Elmt (T, Exchanged_Views); - Exchange_Declarations (Etype (Get_Associated_Node (N))); - end if; + Prepend_Elmt (T, Exchanged_Views); + Exchange_Declarations (Etype (Get_Associated_Node (N))); -- For composite types with inconsistent representation exchange -- component types accordingly. |