]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Ada: Fix spurious warning for renaming of component of VFA record
authorEric Botcazou <ebotcazou@adacore.com>
Mon, 20 Oct 2025 09:21:21 +0000 (11:21 +0200)
committerEric Botcazou <ebotcazou@adacore.com>
Mon, 20 Oct 2025 09:23:54 +0000 (11:23 +0200)
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.

gcc/ada/exp_ch2.adb
gcc/testsuite/gnat.dg/renaming18.adb [new file with mode: 0644]

index 612a4611c4ca941d13537a56d691761434c75723..d2f3df80e00259d7ef10e936bd11d513f643a8c3 100644 (file)
@@ -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.
diff --git a/gcc/testsuite/gnat.dg/renaming18.adb b/gcc/testsuite/gnat.dg/renaming18.adb
new file mode 100644 (file)
index 0000000..a4da04d
--- /dev/null
@@ -0,0 +1,24 @@
+-- { 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;