diff options
| author | Eric Botcazou <ebotcazou@adacore.com> | 2025-10-20 11:21:21 +0200 |
|---|---|---|
| committer | Eric Botcazou <ebotcazou@adacore.com> | 2025-10-20 11:52:27 +0200 |
| commit | 9c390b702d3a1dada30f04f75c14dee88a3f7da5 (patch) | |
| tree | aab8c61dd83330c4fff8d699529b6ead1d890d39 | |
| parent | 4ee0dfd152b31cf11238875ffacfe4cecd786e98 (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.adb | 8 | ||||
| -rw-r--r-- | gcc/testsuite/gnat.dg/renaming18.adb | 24 |
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; |
