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 <[email protected]>
* 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.
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 --