From: Piotr Trojanek Date: Fri, 29 Jan 2021 10:45:36 +0000 (+0100) Subject: [Ada] Cleanup code for flagging object references in interfering contexts X-Git-Tag: upstream/12.2.0~8102 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bf62c9012ce7edbc55a62a4ef34a988209ff81a2;p=platform%2Fupstream%2Fgcc.git [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. --- diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index d2819e4..fc89a31 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -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; + when N_Function_Call => + return Skip; - elsif Is_Entity_Name (N) and then Present (Entity (N)) then - Id := Entity (N); + 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; - 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); return Skip; - end if; - end if; + + when others => + null; + end case; return OK; end Flag_Object;