From bf62c9012ce7edbc55a62a4ef34a988209ff81a2 Mon Sep 17 00:00:00 2001 From: Piotr Trojanek Date: Fri, 29 Jan 2021 11:45:36 +0100 Subject: [PATCH] [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. --- gcc/ada/sem_res.adb | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index d2819e4c437..fc89a313a16 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; - - 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;