From: Bob Duff Date: Thu, 16 Nov 2023 21:45:13 +0000 (-0500) Subject: ada: False alarms from -gnatw.t with generic functions X-Git-Tag: basepoints/gcc-15~4227 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ecdcb83025143f00e95ce9f86b9e80c770116c46;p=thirdparty%2Fgcc.git ada: False alarms from -gnatw.t with generic functions Disable the warnings generated by -gnatw.t on instances. Otherwise, we get false positives. gcc/ada/ * sem_util.adb (Check_Result_And_Post_State): Disable this when we're in an instance. Misc cleanup. --- diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 423b8d3f936d..9215fc7da6cb 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -4370,21 +4370,24 @@ package body Sem_Util is and then Has_No_Output (Subp_Id)) and then not Is_Wrapper (Subp_Id) then - if Pragma_Name (Prag) = Name_Contract_Cases then - Error_Msg_NE (Adjust_Message - ("contract case does not check the outcome of calling " - & "&?.t?"), Expr, Subp_Id); - - elsif Pragma_Name (Prag) = Name_Refined_Post then - Error_Msg_NE (Adjust_Message - ("refined postcondition does not check the outcome of " - & "calling &?.t?"), Err_Node, Subp_Id); - - else - Error_Msg_NE (Adjust_Message - ("postcondition does not check the outcome of calling " - & "&?.t?"), Err_Node, Subp_Id); - end if; + case Pragma_Name (Prag) is + when Name_Contract_Cases => + Error_Msg_NE (Adjust_Message + ("contract case does not check the outcome of calling " + & "&?.t?"), Expr, Subp_Id); + + when Name_Refined_Post => + Error_Msg_NE (Adjust_Message + ("refined postcondition does not check the outcome of " + & "calling &?.t?"), Err_Node, Subp_Id); + + when Name_Postcondition => + Error_Msg_NE (Adjust_Message + ("postcondition does not check the outcome of calling " + & "&?.t?"), Err_Node, Subp_Id); + + when others => pragma Assert (False); + end case; end if; end Check_Conjunct; @@ -4555,11 +4558,16 @@ package body Sem_Util is -- Start of processing for Check_Result_And_Post_State begin + -- Do not check in instances, because we already checked the generic + + if In_Instance then + return; + -- The lack of attribute 'Result or a post-state is classified as a -- suspicious contract. Do not perform the check if the corresponding - -- swich is not set. + -- switch is not set. - if not Warn_On_Suspicious_Contract then + elsif not Warn_On_Suspicious_Contract then return; -- Nothing to do if there is no contract