summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2025-10-20 11:21:21 +0200
committerEric Botcazou <ebotcazou@adacore.com>2025-10-20 11:52:27 +0200
commit9c390b702d3a1dada30f04f75c14dee88a3f7da5 (patch)
treeaab8c61dd83330c4fff8d699529b6ead1d890d39
parent4ee0dfd152b31cf11238875ffacfe4cecd786e98 (diff)
Ada: Fix spurious warning for renaming of component of VFA record
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.
-rw-r--r--gcc/ada/exp_ch2.adb8
-rw-r--r--gcc/testsuite/gnat.dg/renaming18.adb24
2 files changed, 31 insertions, 1 deletions
diff --git a/gcc/ada/exp_ch2.adb b/gcc/ada/exp_ch2.adb
index 06a276bbc03..6c276bac3c1 100644
--- a/gcc/ada/exp_ch2.adb
+++ b/gcc/ada/exp_ch2.adb
@@ -704,9 +704,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
index 00000000000..a4da04d3d62
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/renaming18.adb
@@ -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;