Detection of expression that are "known on entry" (as defined in Ada
2022 RM 6.1.1(20/5)) was confused by validity checks when used from
within expansion of attribute 'Old.
gcc/ada/
* sem_util.adb (Is_Known_On_Entry): Handle constants introduced
by validity checks.
return False;
end if;
+ -- Handle constants introduced by side-effect
+ -- removal, e.g. by validity checks.
+
+ if not Comes_From_Source (Obj) then
+ return
+ Is_Known_On_Entry (Expression (Parent (Obj)));
+ end if;
+
-- return False if not "all views are constant".
if Is_Immutably_Limited_Type (Obj_Typ)
or Needs_Finalization (Obj_Typ)