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.