Commit 76203117 by Arnaud Charlet

(Write_Eol): Remove trailing spaces before writing the line

	(Write_Eol): Remove trailing spaces before writing the line
	(Write_Eol_Keep_Blanks): New procedure to write a line, including
	possible trailing spaces.
	(Output_Source_Line): Call Write_Eol_Keep_Blanks to output a source line
	Fix problem with suppressing warning messages from back end
	Improve handling of deleted warnings

From-SVN: r127474
parent da15c1cd
...@@ -873,8 +873,7 @@ package body Errout is ...@@ -873,8 +873,7 @@ package body Errout is
Errors.Table (Cur_Msg).Warn := Is_Warning_Msg; Errors.Table (Cur_Msg).Warn := Is_Warning_Msg;
Errors.Table (Cur_Msg).Style := Is_Style_Msg; Errors.Table (Cur_Msg).Style := Is_Style_Msg;
Errors.Table (Cur_Msg).Serious := Is_Serious_Error; Errors.Table (Cur_Msg).Serious := Is_Serious_Error;
Errors.Table (Cur_Msg).Uncond := Is_Unconditional_Msg Errors.Table (Cur_Msg).Uncond := Is_Unconditional_Msg;
or Is_Warning_Msg;
Errors.Table (Cur_Msg).Msg_Cont := Continuation; Errors.Table (Cur_Msg).Msg_Cont := Continuation;
Errors.Table (Cur_Msg).Deleted := False; Errors.Table (Cur_Msg).Deleted := False;
...@@ -971,9 +970,9 @@ package body Errout is ...@@ -971,9 +970,9 @@ package body Errout is
or or
Errors.Table (Prev_Msg).Style) Errors.Table (Prev_Msg).Style)
or else or else
(Errors.Table (Cur_Msg).Warn (Errors.Table (Cur_Msg).Warn
or or
Errors.Table (Cur_Msg).Style) Errors.Table (Cur_Msg).Style)
then then
-- All tests passed, delete the message by simply returning -- All tests passed, delete the message by simply returning
-- without any further processing. -- without any further processing.
...@@ -1178,7 +1177,7 @@ package body Errout is ...@@ -1178,7 +1177,7 @@ package body Errout is
-- Finalize -- -- Finalize --
-------------- --------------
procedure Finalize is procedure Finalize (Last_Call : Boolean) is
Cur : Error_Msg_Id; Cur : Error_Msg_Id;
Nxt : Error_Msg_Id; Nxt : Error_Msg_Id;
F : Error_Msg_Id; F : Error_Msg_Id;
...@@ -1218,18 +1217,14 @@ package body Errout is ...@@ -1218,18 +1217,14 @@ package body Errout is
Cur := Errors.Table (Cur).Next; Cur := Errors.Table (Cur).Next;
end loop; end loop;
-- Remaining processing should only be done once in the case where Finalize_Called := True;
-- Finalize has been called more than once.
if Finalize_Called then -- Check consistency of specific warnings (may add warnings). We only
return; -- do this on the last call, after all possible warnings are posted.
else
Finalize_Called := True;
end if;
-- Check consistency of specific warnings (may add warnings)
Validate_Specific_Warnings (Error_Msg'Access); if Last_Call then
Validate_Specific_Warnings (Error_Msg'Access);
end if;
end Finalize; end Finalize;
---------------- ----------------
...@@ -1879,8 +1874,11 @@ package body Errout is ...@@ -1879,8 +1874,11 @@ package body Errout is
S := S + 1; S := S + 1;
end loop; end loop;
-- If we have output a source line, then add the line terminator, with
-- training spaces preserved (so we output the line exactly as input).
if Line_Number_Output then if Line_Number_Output then
Write_Eol; Write_Eol_Keep_Blanks;
end if; end if;
end Output_Source_Line; end Output_Source_Line;
...@@ -1893,8 +1891,7 @@ package body Errout is ...@@ -1893,8 +1891,7 @@ package body Errout is
function Check_For_Warning (N : Node_Id) return Traverse_Result; function Check_For_Warning (N : Node_Id) return Traverse_Result;
-- This function checks one node for a possible warning message -- This function checks one node for a possible warning message
function Check_All_Warnings is new function Check_All_Warnings is new Traverse_Func (Check_For_Warning);
Traverse_Func (Check_For_Warning);
-- This defines the traversal operation -- This defines the traversal operation
----------------------- -----------------------
...@@ -1916,11 +1913,26 @@ package body Errout is ...@@ -1916,11 +1913,26 @@ package body Errout is
function To_Be_Removed (E : Error_Msg_Id) return Boolean is function To_Be_Removed (E : Error_Msg_Id) return Boolean is
begin begin
if E /= No_Error_Msg if E /= No_Error_Msg
and then Errors.Table (E).Optr = Loc
and then (Errors.Table (E).Warn or Errors.Table (E).Style) -- Don't remove if location does not match
and then Errors.Table (E).Optr = Loc
-- Don't remove if not warning message. Note that we do not
-- remove style messages here. They are warning messages but
-- not ones we want removed in this context.
and then Errors.Table (E).Warn
-- Don't remove unconditional messages
and then not Errors.Table (E).Uncond
then then
Warnings_Detected := Warnings_Detected - 1; Warnings_Detected := Warnings_Detected - 1;
return True; return True;
-- No removal required
else else
return False; return False;
end if; end if;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment