From: Justin Squirek <squi...@adacore.com> 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. Tested on x86_64-pc-linux-gnu, committed on master. --- 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 b5c33638b35..4e1258e7cec 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. -- 2.43.2