===================================================================
@@ -313,8 +313,13 @@
Warnings_Detected : Nat := 0;
-- Number of warnings detected. Initialized to zero at the start of
- -- compilation. Initialized for -gnatVa use, see comment above.
+ -- 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).
+
Warnings_Treated_As_Errors : Nat := 0;
-- Number of warnings changed into errors as a result of matching a pattern
-- given in a Warning_As_Error configuration pragma.
===================================================================
@@ -39,10 +39,10 @@
-- from invalid values in such cases.
-- Note on error counts (Serious_Errors_Detected, Total_Errors_Detected,
- -- Warnings_Detected). These counts might more logically appear in this
- -- unit, but we place them 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, 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 --
===================================================================
@@ -261,8 +261,12 @@
M.Deleted := True;
Warnings_Detected := Warnings_Detected - 1;
+ if M.Info then
+ Info_Messages := Info_Messages - 1;
+ end if;
+
if M.Warn_Err then
- Warnings_Treated_As_Errors := Warnings_Treated_As_Errors + 1;
+ Warnings_Treated_As_Errors := Warnings_Treated_As_Errors - 1;
end if;
end if;
@@ -1132,6 +1136,10 @@
if Errors.Table (Cur_Msg).Warn or else Errors.Table (Cur_Msg).Style then
Warnings_Detected := Warnings_Detected + 1;
+ if Errors.Table (Cur_Msg).Info then
+ Info_Messages := Info_Messages + 1;
+ end if;
+
else
Total_Errors_Detected := Total_Errors_Detected + 1;
@@ -1340,8 +1348,12 @@
Errors.Table (E).Deleted := True;
Warnings_Detected := Warnings_Detected - 1;
+ if Errors.Table (E).Info then
+ Info_Messages := Info_Messages - 1;
+ end if;
+
if Errors.Table (E).Warn_Err then
- Warnings_Treated_As_Errors := Warnings_Treated_As_Errors + 1;
+ Warnings_Treated_As_Errors := Warnings_Treated_As_Errors - 1;
end if;
end if;
end Delete_Warning;
@@ -1566,6 +1578,7 @@
Total_Errors_Detected := 0;
Warnings_Treated_As_Errors := 0;
Warnings_Detected := 0;
+ Info_Messages := 0;
Warnings_As_Errors_Count := 0;
Cur_Msg := No_Error_Msg;
List_Pragmas.Init;
@@ -1656,8 +1669,7 @@
begin
-- Extra blank line if error messages or source listing were output
- if Total_Errors_Detected + Warnings_Detected > 0
- or else Full_List
+ if Total_Errors_Detected + Warnings_Detected > 0 or else Full_List
then
Write_Eol;
end if;
@@ -1666,8 +1678,8 @@
-- This normally goes to Standard_Output. The exception is when brief
-- mode is not set, verbose mode (or full list mode) is set, and
-- there are errors. In this case we send the message to standard
- -- error to make sure that *something* appears on standard error in
- -- an error situation.
+ -- error to make sure that *something* appears on standard error
+ -- in an error situation.
if Total_Errors_Detected + Warnings_Detected /= 0
and then not Brief_Output
@@ -1702,12 +1714,12 @@
Write_Str (" errors");
end if;
- if Warnings_Detected /= 0 then
+ if Warnings_Detected - Info_Messages /= 0 then
Write_Str (", ");
Write_Int (Warnings_Detected);
Write_Str (" warning");
- if Warnings_Detected /= 1 then
+ if Warnings_Detected - Info_Messages /= 1 then
Write_Char ('s');
end if;
@@ -1727,6 +1739,16 @@
end if;
end if;
+ if Info_Messages /= 0 then
+ Write_Str (", ");
+ Write_Int (Info_Messages);
+ Write_Str (" info message");
+
+ if Info_Messages > 1 then
+ Write_Char ('s');
+ end if;
+ end if;
+
Write_Eol;
Set_Standard_Output;
end Write_Error_Summary;
@@ -2027,8 +2049,9 @@
Write_Max_Errors;
if Warning_Mode = Treat_As_Error then
- Total_Errors_Detected := Total_Errors_Detected + Warnings_Detected;
- Warnings_Detected := 0;
+ Total_Errors_Detected :=
+ Total_Errors_Detected + Warnings_Detected - Info_Messages;
+ Warnings_Detected := Info_Messages;
end if;
end Output_Messages;
@@ -2200,6 +2223,11 @@
and then not Errors.Table (E).Uncond
then
Warnings_Detected := Warnings_Detected - 1;
+
+ if Errors.Table (E).Info then
+ Info_Messages := Info_Messages - 1;
+ end if;
+
return True;
-- No removal required
===================================================================
@@ -143,7 +143,7 @@
if Errors.Table (D).Warn_Err then
Warnings_Treated_As_Errors :=
- Warnings_Treated_As_Errors + 1;
+ Warnings_Treated_As_Errors - 1;
end if;
else
@@ -233,7 +233,7 @@
function Compilation_Errors return Boolean is
begin
return Total_Errors_Detected /= 0
- or else (Warnings_Detected /= 0
+ or else (Warnings_Detected - Info_Messages /= 0
and then Warning_Mode = Treat_As_Error)
or else Warnings_Treated_As_Errors /= 0;
end Compilation_Errors;
===================================================================
@@ -309,6 +309,10 @@
then
Warnings_Detected := Warnings_Detected + 1;
+ if Errors.Table (Cur_Msg).Info then
+ Info_Messages := Info_Messages + 1;
+ end if;
+
else
Total_Errors_Detected := Total_Errors_Detected + 1;
@@ -536,19 +540,19 @@
Write_Str (" errors");
end if;
- if Warnings_Detected /= 0 then
+ if Warnings_Detected - Info_Messages /= 0 then
Write_Str (", ");
- Write_Int (Warnings_Detected);
+ Write_Int (Warnings_Detected - Info_Messages);
Write_Str (" warning");
- if Warnings_Detected /= 1 then
+ if Warnings_Detected - Info_Messages /= 1 then
Write_Char ('s');
end if;
if Warning_Mode = Treat_As_Error then
Write_Str (" (treated as error");
- if Warnings_Detected /= 1 then
+ if Warnings_Detected - Info_Messages /= 1 then
Write_Char ('s');
end if;
@@ -575,8 +579,9 @@
end if;
if Warning_Mode = Treat_As_Error then
- Total_Errors_Detected := Total_Errors_Detected + Warnings_Detected;
- Warnings_Detected := 0;
+ Total_Errors_Detected :=
+ Total_Errors_Detected + Warnings_Detected - Info_Messages;
+ Warnings_Detected := Info_Messages;
end if;
-- Prevent displaying the same messages again in the future
@@ -596,6 +601,7 @@
Serious_Errors_Detected := 0;
Total_Errors_Detected := 0;
Warnings_Detected := 0;
+ Info_Messages := 0;
Cur_Msg := No_Error_Msg;
-- Initialize warnings table, if all warnings are suppressed, supply
===================================================================
@@ -4995,6 +4995,8 @@
The warning string still appears, but the warning messages are counted
as errors, and prevent the generation of an object file. Note that this
is the only -gnatw switch that affects the handling of style check messages.
+Note also that this switch has no effect on info (information) messages, which
+are not treated as errors if this switch is present.
@item -gnatw.e
@emph{Activate every optional warning}
===================================================================
@@ -20715,6 +20715,8 @@
-- Warning_As_Error --
----------------------
+ -- pragma Warning_As_Error (static_string_EXPRESSION);
+
when Pragma_Warning_As_Error =>
GNAT_Pragma;
Check_Arg_Count (1);
The count of info messages is now separated from the count of warnings and -gnatwe never turns info messages into errors. The following compiles as shown, and generates object code since no error is found when compilation options -gnatwe -gnatld7 -gnatj55 are used. Compiling: infoerr.adb 1. with Text_IO; use Text_IO; 2. procedure InfoErr is 3. J : Natural; 4. begin 5. J := 1; 6. <<ENTER>> | >>> info: code between label and backwards goto rewritten as loop 7. Put_Line (J'Img); 8. J := J + 1; 9. if J > 3 then 10. goto DONE; 11. end if; 12. goto ENTER; 13. <<DONE>> 14. null; 15. end; 15 lines: No errors, 1 info message Tested on x86_64-pc-linux-gnu, committed on trunk 2014-08-01 Robert Dewar <dewar@adacore.com> * atree.ads (Info_Messages): New counter. * err_vars.ads: Minor comment update. * errout.adb (Delete_Warning_And_Continuations): Deal with new Info_Messages counter. (Error_Msg_Internal): ditto. (Delete_Warning): ditto. (Initialize): ditto. (Write_Error_Summary): ditto. (Output_Messages): ditto. (To_Be_Removed): ditto. * erroutc.adb (Delete_Msg): Deal with Info_Messages counter. (Compilation_Errors): ditto. * errutil.adb (Error_Msg): Deal with Info_Messages counter. (Finalize): ditto. (Initialize): ditto. * sem_prag.adb (Analyze_Pragma): Minor comment addition. * gnat_ugn.texi: Document that -gnatwe does not affect info messages.