From 63db260effc0ce9622afe7c43fb8b4eabd5ad3f9 Mon Sep 17 00:00:00 2001 From: Robert Dewar Date: Wed, 5 Dec 2001 01:06:25 +0000 Subject: [PATCH] exp_util.adb: Minor reformatting from last change * 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. From-SVN: r47639 --- gcc/ada/ChangeLog | 8 ++++++++ gcc/ada/errout.adb | 27 +++++++++++++++++++++++++-- gcc/ada/exp_util.adb | 10 +++++++++- 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 + + * 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 * 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 -- 2.30.2