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 Botcazou
diff --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;

Reply via email to