[COMMITTED] ada: False alarms from -gnatw.t with generic functions
Checks
Commit Message
From: Bob Duff <duff@adacore.com>
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.
Tested on x86_64-pc-linux-gnu, committed on master.
---
gcc/ada/sem_util.adb | 42 +++++++++++++++++++++++++-----------------
1 file changed, 25 insertions(+), 17 deletions(-)
@@ -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