[Ada] Cleanup code for flagging object references in interfering contexts

gcc/ada/

	* sem_res.adb (Flag_Object): Replace chained IF with a CASE;
	remove repeated calls to Entity; do not traverse into
	N_Identifier and N_Expanded_Name, because only need to examine
	their Entity field anyway.
This commit is contained in:
Piotr Trojanek 2021-01-29 11:45:36 +01:00 committed by Pierre-Marie de Rodat
parent bfdc95943e
commit bf62c9012c

View file

@ -3748,24 +3748,30 @@ package body Sem_Res is
Id : Entity_Id;
begin
-- Do not consider nested function calls because they have already
-- been processed during their own resolution.
case Nkind (N) is
-- Do not consider nested function calls because they have
-- already been processed during their own resolution.
if Nkind (N) = N_Function_Call then
return Skip;
elsif Is_Entity_Name (N) and then Present (Entity (N)) then
Id := Entity (N);
if Is_Object (Id)
and then Is_Effectively_Volatile_For_Reading (Id)
then
Error_Msg_N
("volatile object cannot appear in this context (SPARK "
& "RM 7.1.3(10))", N);
when N_Function_Call =>
return Skip;
end if;
end if;
when N_Identifier | N_Expanded_Name =>
Id := Entity (N);
if Present (Id)
and then Is_Object (Id)
and then Is_Effectively_Volatile_For_Reading (Id)
then
Error_Msg_N
("volatile object cannot appear in this context"
& " (SPARK RM 7.1.3(10))", N);
end if;
return Skip;
when others =>
null;
end case;
return OK;
end Flag_Object;