summaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorbosch <bosch@138bc75d-0d04-0410-961f-82ee72b054a4>2001-12-05 01:06:25 +0000
committerbosch <bosch@138bc75d-0d04-0410-961f-82ee72b054a4>2001-12-05 01:06:25 +0000
commit7f7b0e0287a4afca74419b1a03a72a36630cfaf8 (patch)
tree2e1986a256c93952f2cdc37de5921659124ea2b8 /gcc/ada
parentf1907dd1e0f8b7014c1246acf699360510b88a00 (diff)
downloadgcc-7f7b0e0287a4afca74419b1a03a72a36630cfaf8.tar.gz
* exp_util.adb: Minor reformatting from last change
* errout.adb (Check_For_Warning): For a Raised_Constraint_Error node which is a rewriting of an expression, traverse the original expression to remove warnings that may have been posted on it. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47639 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/ChangeLog8
-rw-r--r--gcc/ada/errout.adb27
-rw-r--r--gcc/ada/exp_util.adb10
3 files changed, 42 insertions, 3 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 0f72ac5f331..02bc72d4575 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,11 @@
+2001-12-04 Robert Dewar <dewar@gnat.com>
+
+ * exp_util.adb: Minor reformatting from last change
+
+ * errout.adb (Check_For_Warning): For a Raised_Constraint_Error node
+ which is a rewriting of an expression, traverse the original
+ expression to remove warnings that may have been posted on it.
+
2001-12-04 Ed Schonberg <schonber@gnat.com>
* exp_util.adb (Must_Be_Aligned): Return false for a component of a
diff --git a/gcc/ada/errout.adb b/gcc/ada/errout.adb
index ad64a5fa30a..28b0c4c212a 100644
--- a/gcc/ada/errout.adb
+++ b/gcc/ada/errout.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- $Revision: 1.208 $
+-- $Revision$
-- --
-- Copyright (C) 1992-2001 Free Software Foundation, Inc. --
-- --
@@ -1981,7 +1981,30 @@ package body Errout is
E := Errors.Table (E).Next;
end loop;
- return OK;
+ if Nkind (N) = N_Raise_Constraint_Error
+ and then Original_Node (N) /= N
+ then
+
+ -- Warnings may have been posted on subexpressions of
+ -- the original tree. We temporarily replace the raise
+ -- statement with the original expression to remove
+ -- those warnings, whose sloc do not match those of
+ -- any node in the current tree.
+
+ declare
+ Old : Node_Id := N;
+ Status : Traverse_Result;
+
+ begin
+ Rewrite (N, Original_Node (N));
+ Status := Check_For_Warning (N);
+ Rewrite (N, Old);
+ return Status;
+ end;
+
+ else
+ return OK;
+ end if;
end Check_For_Warning;
-- Start of processing for Remove_Warning_Messages
diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb
index 4cdd988aeeb..a0a4d01b1ed 100644
--- a/gcc/ada/exp_util.adb
+++ b/gcc/ada/exp_util.adb
@@ -2503,9 +2503,14 @@ package body Exp_Util is
-- choose to pack the rest of the record. Lead to less efficient code,
-- but safer vis-a-vis of back-end choices.
+ -----------------------------
+ -- Partially_Packed_Record --
+ -----------------------------
+
function In_Partially_Packed_Record (Comp : Entity_Id) return Boolean is
- Rec_Type : constant Entity_Id := Scope (Comp);
+ Rec_Type : constant Entity_Id := Scope (Comp);
Prev_Comp : Entity_Id;
+
begin
Prev_Comp := First_Entity (Rec_Type);
while Present (Prev_Comp) loop
@@ -2521,6 +2526,9 @@ package body Exp_Util is
return False;
end In_Partially_Packed_Record;
+
+ -- Start of processing for Must_Be_Aligned
+
begin
-- If object is strictly aligned, we can quit now