]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: False alarms from -gnatw.t with generic functions
authorBob Duff <duff@adacore.com>
Thu, 16 Nov 2023 21:45:13 +0000 (16:45 -0500)
committerMarc Poulhiès <poulhies@adacore.com>
Tue, 28 Nov 2023 09:35:48 +0000 (10:35 +0100)
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.

gcc/ada/sem_util.adb

index 423b8d3f936d4221f94ef707e81f7a8f6b9a18a4..9215fc7da6cb1fa820ff01f0a008299cb9c7cf3d 100644 (file)
@@ -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