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.
-- 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.