aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2007-08-14 11:04:48 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2007-08-14 11:04:48 +0200
commit762031177e3e03ef37f8c1fb6c928bed3538bf7e (patch)
tree1bb18a3351cde0d151dc453c8ac38ac9ba936995 /gcc
parentda15c1cd888129d937bd2ddaff35803bfbf56676 (diff)
downloadgcc-762031177e3e03ef37f8c1fb6c928bed3538bf7e.zip
gcc-762031177e3e03ef37f8c1fb6c928bed3538bf7e.tar.gz
gcc-762031177e3e03ef37f8c1fb6c928bed3538bf7e.tar.bz2
(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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/errout.adb52
1 files changed, 32 insertions, 20 deletions
diff --git a/gcc/ada/errout.adb b/gcc/ada/errout.adb
index cfadbd8..6cb9c38 100644
--- a/gcc/ada/errout.adb
+++ b/gcc/ada/errout.adb
@@ -873,8 +873,7 @@ package body Errout is
Errors.Table (Cur_Msg).Warn := Is_Warning_Msg;
Errors.Table (Cur_Msg).Style := Is_Style_Msg;
Errors.Table (Cur_Msg).Serious := Is_Serious_Error;
- Errors.Table (Cur_Msg).Uncond := Is_Unconditional_Msg
- or Is_Warning_Msg;
+ Errors.Table (Cur_Msg).Uncond := Is_Unconditional_Msg;
Errors.Table (Cur_Msg).Msg_Cont := Continuation;
Errors.Table (Cur_Msg).Deleted := False;
@@ -971,9 +970,9 @@ package body Errout is
or
Errors.Table (Prev_Msg).Style)
or else
- (Errors.Table (Cur_Msg).Warn
+ (Errors.Table (Cur_Msg).Warn
or
- Errors.Table (Cur_Msg).Style)
+ Errors.Table (Cur_Msg).Style)
then
-- All tests passed, delete the message by simply returning
-- without any further processing.
@@ -1178,7 +1177,7 @@ package body Errout is
-- Finalize --
--------------
- procedure Finalize is
+ procedure Finalize (Last_Call : Boolean) is
Cur : Error_Msg_Id;
Nxt : Error_Msg_Id;
F : Error_Msg_Id;
@@ -1218,18 +1217,14 @@ package body Errout is
Cur := Errors.Table (Cur).Next;
end loop;
- -- Remaining processing should only be done once in the case where
- -- Finalize has been called more than once.
+ Finalize_Called := True;
- if Finalize_Called then
- return;
- else
- Finalize_Called := True;
- end if;
-
- -- Check consistency of specific warnings (may add warnings)
+ -- Check consistency of specific warnings (may add warnings). We only
+ -- do this on the last call, after all possible warnings are posted.
- Validate_Specific_Warnings (Error_Msg'Access);
+ if Last_Call then
+ Validate_Specific_Warnings (Error_Msg'Access);
+ end if;
end Finalize;
----------------
@@ -1879,8 +1874,11 @@ package body Errout is
S := S + 1;
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
- Write_Eol;
+ Write_Eol_Keep_Blanks;
end if;
end Output_Source_Line;
@@ -1893,8 +1891,7 @@ package body Errout is
function Check_For_Warning (N : Node_Id) return Traverse_Result;
-- This function checks one node for a possible warning message
- function Check_All_Warnings is new
- Traverse_Func (Check_For_Warning);
+ function Check_All_Warnings is new Traverse_Func (Check_For_Warning);
-- This defines the traversal operation
-----------------------
@@ -1916,11 +1913,26 @@ package body Errout is
function To_Be_Removed (E : Error_Msg_Id) return Boolean is
begin
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
Warnings_Detected := Warnings_Detected - 1;
return True;
+
+ -- No removal required
+
else
return False;
end if;