https://gcc.gnu.org/g:416e572edb0cbc84081de5a1932be7a2138a529a

commit r15-456-g416e572edb0cbc84081de5a1932be7a2138a529a
Author: Justin Squirek <squi...@adacore.com>
Date:   Mon Feb 12 15:50:24 2024 +0000

    ada: Spurious unreferenced warning on selected component
    
    This patch fixes an error in the compiler whereby a selected component on 
the
    left hand side of an assignment statement may not get marked as referenced -
    leading to spurious unreferenced warnings on such objects.
    
    gcc/ada/
    
            * sem_util.adb (Set_Referenced_Modified): Use Original_Node to
            avoid recursive calls on expanded / internal objects such that
            source nodes get appropriately marked as referenced.

Diff:
---
 gcc/ada/sem_util.adb | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index b5c33638b35f..4e1258e7cecd 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -27625,7 +27625,11 @@ package body Sem_Util is
       --  Deal with indexed or selected component where prefix is modified
 
       if Nkind (N) in N_Indexed_Component | N_Selected_Component then
-         Pref := Prefix (N);
+
+         --  Grab the original node to avoid looking at internally generated
+         --  objects.
+
+         Pref := Original_Node (Prefix (N));
 
          --  If prefix is access type, then it is the designated object that is
          --  being modified, which means we have no entity to set the flag on.

Reply via email to