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.
Tested on x86-64/Linux, applied on all active branches.
2025-10-20 Eric Botcazou <[email protected]>
PR ada/107536
* exp_ch2.adb (Expand_Renaming): Mark the entity as referenced.
2025-10-20 Eric Botcazou <[email protected]>
* gnat.dg/renaming18.adb: New test.
--
Eric Botcazoudiff --git a/gcc/ada/exp_ch2.adb b/gcc/ada/exp_ch2.adb
index 612a4611c4c..d2f3df80e00 100644
--- a/gcc/ada/exp_ch2.adb
+++ b/gcc/ada/exp_ch2.adb
@@ -706,9 +706,15 @@ package body Exp_Ch2 is
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.
-- { 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;