diff mbox

[Ada] Info messages treated as errors with -gnatwe

Message ID 20170428134733.GA79831@adacore.com
State New
Headers show

Commit Message

Arnaud Charlet April 28, 2017, 1:47 p.m. UTC
This patch ensures that info messages are not treated as errors when
warnings must be treated as errors due to -gnatwe.

------------
-- Source --
------------

--  pack.ads

package Pack is
   procedure Proc_1;
   procedure Proc_2;
end Pack;

--  pack.adb

package body Pack is
   procedure Proc_1 is begin null; end Proc_1;
   procedure Proc_2 is begin null; end Proc_2;
end Pack;

--  main.adb

with Pack;

procedure Main is
begin
   Pack.Proc_1;
   Pack.Proc_2;
end Main;

----------------------------
-- Compilation and output --
----------------------------

$ gnatmake -q -gnatwe.e main.adb
pack.ads:2:14: info: "Pack" requires body ("Proc_1" requires completion)
pack.ads:3:14: info: "Pack" requires body ("Proc_2" requires completion)

Tested on x86_64-pc-linux-gnu, committed on trunk

2017-04-28  Javier Miranda  <miranda@adacore.com>

	* atree.ads (Info_Messages): Removed.
	(Warning_Info_Messages): New counter.
	(Report_Info_Messages): New counter.
	* err_vars.ads Update documentation.
	* errout.adb (Delete_Warning_And_Continuations): Update
	Info_Message occurrences.
	(Error_Msg_Internal): Update Info_Message occurrences.
	(Delete_Warning): Update Info_Message occurrences.
	(Write_Error_Summary): Update Info_Message occurrences.
	(Output_Messages): Update Info_Message occurrences.
	(To_Be_Removed): Update Info_Message occurrences.
	(Reset_Warnings): Update Info_Message occurrences.
	* errutil.adb (Error_Msg): Update Info_Message occurrences.
	(Finalize): Update Info_Message occurrences.
	(Initialize): Update Info_Message occurrences.
	* erroutc.adb (Delete_Msg): Update Info_Message occurrences.
	(Compilation_Errors): Update Info_Message_Occurences.
diff mbox

Patch

Index: atree.ads
===================================================================
--- atree.ads	(revision 247295)
+++ atree.ads	(working copy)
@@ -320,10 +320,16 @@ 
    --  compilation. Initialized for -gnatVa use, see comment above. This
    --  count includes the count of style and info messages.
 
-   Info_Messages : Nat := 0;
-   --  Number of info messages generated. Info messages are neved treated as
-   --  errors (whether from use of the pragma, or the compiler switch -gnatwe).
+   Warning_Info_Messages : Nat := 0;
+   --  Number of info messages generated as warnings. Info messages are never
+   --  treated as errors (whether from use of the pragma, or the compiler
+   --  switch -gnatwe).
 
+   Report_Info_Messages : Nat := 0;
+   --  Number of info messages generated as reports. Info messages are never
+   --  treated as errors (whether from use of the pragma, or the compiler
+   --  switch -gnatwe). Used under Spark_Mode to report proved checks.
+
    Check_Messages : Nat := 0;
    --  Number of check messages generated. Check messages are neither warnings
    --  nor errors.
Index: errout.adb
===================================================================
--- errout.adb	(revision 247385)
+++ errout.adb	(working copy)
@@ -277,7 +277,7 @@ 
                Warnings_Detected := Warnings_Detected - 1;
 
                if M.Info then
-                  Info_Messages := Info_Messages - 1;
+                  Warning_Info_Messages := Warning_Info_Messages - 1;
                end if;
 
                if M.Warn_Err then
@@ -1186,12 +1186,14 @@ 
       --  Bump appropriate statistics counts
 
       if Errors.Table (Cur_Msg).Info then
-         Info_Messages := Info_Messages + 1;
 
          --  Could be (usually is) both "info" and "warning"
 
          if Errors.Table (Cur_Msg).Warn then
+            Warning_Info_Messages := Warning_Info_Messages + 1;
             Warnings_Detected := Warnings_Detected + 1;
+         else
+            Report_Info_Messages := Report_Info_Messages + 1;
          end if;
 
       elsif Errors.Table (Cur_Msg).Warn
@@ -1420,7 +1422,7 @@ 
             Warnings_Detected := Warnings_Detected - 1;
 
             if Errors.Table (E).Info then
-               Info_Messages := Info_Messages - 1;
+               Warning_Info_Messages := Warning_Info_Messages - 1;
             end if;
 
             if Errors.Table (E).Warn_Err then
@@ -1785,12 +1787,12 @@ 
             Write_Str (" errors");
          end if;
 
-         if Warnings_Detected - Info_Messages /= 0 then
+         if Warnings_Detected - Warning_Info_Messages /= 0 then
             Write_Str (", ");
             Write_Int (Warnings_Detected);
             Write_Str (" warning");
 
-            if Warnings_Detected - Info_Messages /= 1 then
+            if Warnings_Detected - Warning_Info_Messages /= 1 then
                Write_Char ('s');
             end if;
 
@@ -1810,12 +1812,12 @@ 
             end if;
          end if;
 
-         if Info_Messages /= 0 then
+         if Warning_Info_Messages + Report_Info_Messages /= 0 then
             Write_Str (", ");
-            Write_Int (Info_Messages);
+            Write_Int (Warning_Info_Messages + Report_Info_Messages);
             Write_Str (" info message");
 
-            if Info_Messages > 1 then
+            if Warning_Info_Messages + Report_Info_Messages > 1 then
                Write_Char ('s');
             end if;
          end if;
@@ -2119,13 +2121,13 @@ 
 
       Write_Max_Errors;
 
-      --  Even though info messages are a subclass of warnings, they must not
-      --  be treated as errors when -gnatwe is in effect.
+      --  Even though Warning_Info_Messages are a subclass of warnings, they
+      --  must not be treated as errors when -gnatwe is in effect.
 
       if Warning_Mode = Treat_As_Error then
          Total_Errors_Detected :=
-           Total_Errors_Detected + Warnings_Detected - Info_Messages;
-         Warnings_Detected := Info_Messages;
+           Total_Errors_Detected + Warnings_Detected - Warning_Info_Messages;
+         Warnings_Detected := Warning_Info_Messages;
       end if;
    end Output_Messages;
 
@@ -2299,7 +2301,7 @@ 
                Warnings_Detected := Warnings_Detected - 1;
 
                if Errors.Table (E).Info then
-                  Info_Messages := Info_Messages - 1;
+                  Warning_Info_Messages := Warning_Info_Messages - 1;
                end if;
 
                return True;
@@ -2400,7 +2402,7 @@ 
    begin
       Warnings_Treated_As_Errors := 0;
       Warnings_Detected := 0;
-      Info_Messages := 0;
+      Warning_Info_Messages := 0;
       Warnings_As_Errors_Count := 0;
    end Reset_Warnings;
 
Index: erroutc.adb
===================================================================
--- erroutc.adb	(revision 247385)
+++ erroutc.adb	(working copy)
@@ -140,10 +140,12 @@ 
             --  Adjust error message count
 
             if Errors.Table (D).Info then
-               Info_Messages := Info_Messages - 1;
 
                if Errors.Table (D).Warn then
+                  Warning_Info_Messages := Warning_Info_Messages - 1;
                   Warnings_Detected := Warnings_Detected - 1;
+               else
+                  Report_Info_Messages := Report_Info_Messages - 1;
                end if;
 
             elsif Errors.Table (D).Warn or else Errors.Table (D).Style then
@@ -244,7 +246,7 @@ 
    begin
       return
         Total_Errors_Detected /= 0
-          or else (Warnings_Detected - Info_Messages /= 0
+          or else (Warnings_Detected - Warning_Info_Messages /= 0
                     and then Warning_Mode = Treat_As_Error)
           or else Warnings_Treated_As_Errors /= 0;
    end Compilation_Errors;
Index: errutil.adb
===================================================================
--- errutil.adb	(revision 247385)
+++ errutil.adb	(working copy)
@@ -305,12 +305,14 @@ 
       --  Bump appropriate statistics counts
 
       if Errors.Table (Cur_Msg).Info then
-         Info_Messages := Info_Messages + 1;
 
          --  Could be (usually is) both "info" and "warning"
 
          if Errors.Table (Cur_Msg).Warn then
+            Warning_Info_Messages := Warning_Info_Messages + 1;
             Warnings_Detected := Warnings_Detected + 1;
+         else
+            Report_Info_Messages := Report_Info_Messages + 1;
          end if;
 
       elsif Errors.Table (Cur_Msg).Warn
@@ -548,19 +550,19 @@ 
             Write_Str (" errors");
          end if;
 
-         if Warnings_Detected - Info_Messages  /= 0 then
+         if Warnings_Detected - Warning_Info_Messages /= 0 then
             Write_Str (", ");
-            Write_Int (Warnings_Detected - Info_Messages);
+            Write_Int (Warnings_Detected - Warning_Info_Messages);
             Write_Str (" warning");
 
-            if Warnings_Detected - Info_Messages /= 1 then
+            if Warnings_Detected - Warning_Info_Messages /= 1 then
                Write_Char ('s');
             end if;
 
             if Warning_Mode = Treat_As_Error then
                Write_Str (" (treated as error");
 
-               if Warnings_Detected - Info_Messages /= 1 then
+               if Warnings_Detected - Warning_Info_Messages /= 1 then
                   Write_Char ('s');
                end if;
 
@@ -586,13 +588,13 @@ 
          end if;
       end if;
 
-      --  Even though info messages are a subclass of warnings, they must not
-      --  be treated as errors when -gnatwe is in effect.
+      --  Even though Warning_Info_Messages are a subclass of warnings, they
+      --  must not be treated as errors when -gnatwe is in effect.
 
       if Warning_Mode = Treat_As_Error then
          Total_Errors_Detected :=
-           Total_Errors_Detected + Warnings_Detected - Info_Messages;
-         Warnings_Detected := Info_Messages;
+           Total_Errors_Detected + Warnings_Detected - Warning_Info_Messages;
+         Warnings_Detected := Warning_Info_Messages;
       end if;
 
       --  Prevent displaying the same messages again in the future
@@ -612,7 +614,8 @@ 
       Serious_Errors_Detected := 0;
       Total_Errors_Detected := 0;
       Warnings_Detected := 0;
-      Info_Messages := 0;
+      Warning_Info_Messages := 0;
+      Report_Info_Messages := 0;
       Cur_Msg := No_Error_Msg;
 
       --  Initialize warnings table, if all warnings are suppressed, supply
Index: err_vars.ads
===================================================================
--- err_vars.ads	(revision 247293)
+++ err_vars.ads	(working copy)
@@ -39,10 +39,11 @@ 
    --  from invalid values in such cases.
 
    --  Note on error counts (Serious_Errors_Detected, Total_Errors_Detected,
-   --  Warnings_Detected, Info_Messages). These counts might more logically
-   --  appear in this unit, but we place them instead in atree.ads, because of
-   --  licensing issues. We need to be able to access these counts from units
-   --  that have the more general licensing conditions.
+   --  Warnings_Detected, Warning_Info_Messages, Report_Info_Messages). These
+   --  counts might more logically appear in this unit, but we place them
+   --  instead in atree.ads, because of licensing issues. We need to be able
+   --  to access these counts from units that have the more general licensing
+   --  conditions.
 
    ----------------------------------
    -- Error Message Mode Variables --