From: Arnaud Charlet Date: Tue, 22 Dec 2020 15:34:37 +0000 (-0500) Subject: [Ada] Spurious warning on postcondition and result X-Git-Tag: basepoints/gcc-13~7962 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e36ee1b4df7197b6e7542bb67004b1fcf09714ce;p=thirdparty%2Fgcc.git [Ada] Spurious warning on postcondition and result gcc/ada/ * sem_util.adb (Check_Result_And_Post_State): Replace custom Has_In_Out_Parameter with existing Has_Out_Or_In_Out_Parameter flag which corresponds exactly to what we need. --- diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index b7b622dbcca9..c4fe191211fe 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -4701,10 +4701,6 @@ package body Sem_Util is -- and post-state. Prag is a [refined] postcondition or a contract-cases -- pragma. Result_Seen is set when the pragma mentions attribute 'Result - function Has_In_Out_Parameter (Subp_Id : Entity_Id) return Boolean; - -- Determine whether subprogram Subp_Id contains at least one IN OUT - -- formal parameter. - ------------------------------------------- -- Check_Result_And_Post_State_In_Pragma -- ------------------------------------------- @@ -5093,28 +5089,6 @@ package body Sem_Util is end if; end Check_Result_And_Post_State_In_Pragma; - -------------------------- - -- Has_In_Out_Parameter -- - -------------------------- - - function Has_In_Out_Parameter (Subp_Id : Entity_Id) return Boolean is - Formal : Entity_Id; - - begin - -- Traverse the formals looking for an IN OUT parameter - - Formal := First_Formal (Subp_Id); - while Present (Formal) loop - if Ekind (Formal) = E_In_Out_Parameter then - return True; - end if; - - Next_Formal (Formal); - end loop; - - return False; - end Has_In_Out_Parameter; - -- Local variables Items : constant Node_Id := Contract (Subp_Id); @@ -5194,10 +5168,10 @@ package body Sem_Util is null; -- Regardless of whether the function has postconditions or contract - -- cases, or whether they mention attribute 'Result, an IN OUT formal + -- cases, or whether they mention attribute 'Result, an [IN] OUT formal -- parameter is always treated as a result. - elsif Has_In_Out_Parameter (Spec_Id) then + elsif Has_Out_Or_In_Out_Parameter (Spec_Id) then null; -- The function has both a postcondition and contract cases and they do