This marks the local renaming generated for private components of protected
types as coming from source, so that the components are displayed when the
'info locals' command is used in GDB.
Tested on x86_64-pc-linux-gnu, committed on trunk
gcc/ada/
* exp_ch9.adb (Install_Private_Data_Declarations): Copy the Sloc of
components for the local renamings as well as the Comes_From_Source
flag, and also set Warnings_Off on them. Use Nam local variable.
diff --git a/gcc/ada/exp_ch9.adb b/gcc/ada/exp_ch9.adb
--- a/gcc/ada/exp_ch9.adb
+++ b/gcc/ada/exp_ch9.adb
@@ -13796,14 +13796,15 @@ package body Exp_Ch9 is
Comp : Node_Id;
Comp_Id : Entity_Id;
Decl_Id : Entity_Id;
+ Nam : Name_Id;
begin
Comp := First (Private_Declarations (Def));
while Present (Comp) loop
if Nkind (Comp) = N_Component_Declaration then
Comp_Id := Defining_Identifier (Comp);
- Decl_Id :=
- Make_Defining_Identifier (Loc, Chars (Comp_Id));
+ Nam := Chars (Comp_Id);
+ Decl_Id := Make_Defining_Identifier (Sloc (Comp_Id), Nam);
-- Minimal decoration
@@ -13818,6 +13819,14 @@ package body Exp_Ch9 is
Set_Is_Aliased (Decl_Id, Is_Aliased (Comp_Id));
Set_Is_Independent (Decl_Id, Is_Independent (Comp_Id));
+ -- Copy the Comes_From_Source flag of the component, as
+ -- the renaming may be the only entity directly seen by
+ -- the user in the context, but do not warn for it.
+
+ Set_Comes_From_Source
+ (Decl_Id, Comes_From_Source (Comp_Id));
+ Set_Warnings_Off (Decl_Id);
+
-- Generate:
-- comp_name : comp_typ renames _object.comp_name;
@@ -13828,10 +13837,8 @@ package body Exp_Ch9 is
New_Occurrence_Of (Etype (Comp_Id), Loc),
Name =>
Make_Selected_Component (Loc,
- Prefix =>
- New_Occurrence_Of (Obj_Ent, Loc),
- Selector_Name =>
- Make_Identifier (Loc, Chars (Comp_Id))));
+ Prefix => New_Occurrence_Of (Obj_Ent, Loc),
+ Selector_Name => Make_Identifier (Loc, Nam)));
Add (Decl);
end if;