This is a regression present on the mainline and all active branches: the
compiler gives a spurious "is not referenced" warning for the renaming of
a component of a Volatile_Full_Access record.
gcc/ada/
PR ada/107536
* exp_ch2.adb (Expand_Renaming): Mark the entity as referenced.
gcc/testsuite/
* gnat.dg/renaming18.adb: New test.
T : constant Entity_Id := Etype (N);
begin
+ -- Mark the entity as referenced since this reference is going away
+
+ Set_Referenced (E);
+
+ -- Now rewrite the reference as a copy of the renamed object
+
Rewrite (N, New_Copy_Tree (Renamed_Object (E)));
- -- We mark the copy as unanalyzed, so that it is sure to be reanalyzed
+ -- Mark the copy as unanalyzed to make sure that it is reanalyzed
-- at the top level. This is needed in the packed case since we
-- specifically avoided expanding packed array references when the
-- renaming declaration was analyzed.
--- /dev/null
+-- { dg-do compile }
+-- { dg-options "-gnatwu" }
+
+procedure Renaming18 is
+
+ type T is record
+ Item : Integer;
+ end record;
+
+ A_T : T;
+ Item : Integer renames A_T.Item;
+
+ type VFA_T is record
+ Item : Integer;
+ end record
+ with Volatile_Full_Access;
+
+ A_VFA_T : VFA_T;
+ VFA_Item : Integer renames A_VFA_T.Item; -- { dg-bogus "is not referenced" }
+
+begin
+ Item := 42;
+ VFA_Item := 42;
+end;