aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2010-08-05 11:21:58 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2010-08-05 11:21:58 +0200
commitaa9a7dd7c2252947fb6e28b8da8a5cf8e9cdde87 (patch)
treef55992fa388832e857d88c10e21047fc3211650f
parent0d90129062e7e64a15adf3a0ec5120a2cf8ea7ee (diff)
downloadgcc-aa9a7dd7c2252947fb6e28b8da8a5cf8e9cdde87.zip
gcc-aa9a7dd7c2252947fb6e28b8da8a5cf8e9cdde87.tar.gz
gcc-aa9a7dd7c2252947fb6e28b8da8a5cf8e9cdde87.tar.bz2
[multiple changes]
2010-08-05 Ed Schonberg <schonberg@adacore.com> * exp_util.adb (Insert_Actions): If the action appears within a conditional expression that is already analyzed, insert action further out. 2010-08-05 Robert Dewar <dewar@adacore.com> * exp_ch4.adb: Minor reformatting. From-SVN: r162907
-rw-r--r--gcc/ada/ChangeLog10
-rw-r--r--gcc/ada/exp_ch4.adb14
-rw-r--r--gcc/ada/exp_util.adb77
3 files changed, 61 insertions, 40 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 94a59c0..dfe7431 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,13 @@
+2010-08-05 Ed Schonberg <schonberg@adacore.com>
+
+ * exp_util.adb (Insert_Actions): If the action appears within a
+ conditional expression that is already analyzed, insert action further
+ out.
+
+2010-08-05 Robert Dewar <dewar@adacore.com>
+
+ * exp_ch4.adb: Minor reformatting.
+
2010-08-05 Thomas Quinot <quinot@adacore.com>
* exp_ch4.adb: Minor reformatting
diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb
index d126dab..d60555d 100644
--- a/gcc/ada/exp_ch4.adb
+++ b/gcc/ada/exp_ch4.adb
@@ -6995,14 +6995,15 @@ package body Exp_Ch4 is
begin
if Safe_In_Place_Array_Op (Lhs, Op1, Op2) then
- if N = Op1 and then Nkind (Op2) = N_Op_Not then
- -- (not A) op (not B) can be reduced to a single call
+ -- (not A) op (not B) can be reduced to a single call
+
+ if N = Op1 and then Nkind (Op2) = N_Op_Not then
return;
- elsif N = Op2 and then Nkind (Parent (N)) = N_Op_Xor then
- -- A xor (not B) can also be special-cased
+ -- A xor (not B) can also be special-cased
+ elsif N = Op2 and then Nkind (Parent (N)) = N_Op_Xor then
return;
end if;
end if;
@@ -7274,7 +7275,10 @@ package body Exp_Ch4 is
-- Arithmetic overflow checks for signed integer/fixed point types
- if Is_Signed_Integer_Type (Typ) or else Is_Fixed_Point_Type (Typ) then
+ if Is_Signed_Integer_Type (Typ)
+ or else
+ Is_Fixed_Point_Type (Typ)
+ then
Apply_Arithmetic_Overflow_Check (N);
-- VAX floating-point types case
diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb
index cf30054..c440852 100644
--- a/gcc/ada/exp_util.adb
+++ b/gcc/ada/exp_util.adb
@@ -814,8 +814,8 @@ package body Exp_Util is
Stats : constant List_Id := New_List;
begin
- -- For a dynamic task, the name comes from the target variable.
- -- For a static one it is a formal of the enclosing init proc.
+ -- For a dynamic task, the name comes from the target variable. For a
+ -- static one it is a formal of the enclosing init proc.
if Dyn then
Get_Name_String (Chars (Entity (Prefix (Id_Ref))));
@@ -1105,8 +1105,8 @@ package body Exp_Util is
IR : Node_Id;
begin
- -- An itype reference must only be created if this is a local
- -- itype, so that gigi can elaborate it on the proper objstack.
+ -- An itype reference must only be created if this is a local itype, so
+ -- that gigi can elaborate it on the proper objstack.
if Is_Itype (Typ)
and then Scope (Typ) = Current_Scope
@@ -1356,9 +1356,9 @@ package body Exp_Util is
pragma Assert (Is_Class_Wide_Type (Unc_Type));
null;
- -- In Ada95, nothing to be done if the type of the expression is
- -- limited, because in this case the expression cannot be copied,
- -- and its use can only be by reference.
+ -- In Ada95 nothing to be done if the type of the expression is limited,
+ -- because in this case the expression cannot be copied, and its use can
+ -- only be by reference.
-- In Ada2005, the context can be an object declaration whose expression
-- is a function that returns in place. If the nominal subtype has
@@ -1823,9 +1823,9 @@ package body Exp_Util is
if Nkind (Cond) = N_And_Then
or else Nkind (Cond) = N_Op_And
then
- -- Don't ever try to invert a condition that is of the form
- -- of an AND or AND THEN (since we are not doing sufficiently
- -- general processing to allow this).
+ -- Don't ever try to invert a condition that is of the form of an
+ -- AND or AND THEN (since we are not doing sufficiently general
+ -- processing to allow this).
if Sens = False then
Op := N_Empty;
@@ -2002,8 +2002,8 @@ package body Exp_Util is
end;
-- ELSIF part. Condition is known true within the referenced
- -- ELSIF, known False in any subsequent ELSIF or ELSE part, and
- -- unknown before the ELSE part or after the IF statement.
+ -- ELSIF, known False in any subsequent ELSIF or ELSE part,
+ -- and unknown before the ELSE part or after the IF statement.
elsif Nkind (CV) = N_Elsif_Part then
@@ -2386,12 +2386,19 @@ package body Exp_Util is
ElseX : constant Node_Id := Next (ThenX);
begin
- -- Actions belong to the then expression, temporarily
- -- place them as Then_Actions of the conditional expr.
- -- They will be moved to the proper place later when
- -- the conditional expression is expanded.
+ -- If the enclosing expression is already analyzed, as
+ -- is the case for nested elaboration checks, insert the
+ -- conditional further out.
- if N = ThenX then
+ if Analyzed (P) then
+ null;
+
+ -- Actions belong to the then expression, temporarily place
+ -- them as Then_Actions of the conditional expr. They will
+ -- be moved to the proper place later when the conditional
+ -- expression is expanded.
+
+ elsif N = ThenX then
if Present (Then_Actions (P)) then
Insert_List_After_And_Analyze
(Last (Then_Actions (P)), Ins_Actions);
@@ -2427,9 +2434,9 @@ package body Exp_Util is
end if;
end;
- -- Alternative of case expression, we place the action in
- -- the Actions field of the case expression alternative, this
- -- will be handled when the case expression is expanded.
+ -- Alternative of case expression, we place the action in the
+ -- Actions field of the case expression alternative, this will
+ -- be handled when the case expression is expanded.
when N_Case_Expression_Alternative =>
if Present (Actions (P)) then
@@ -2464,11 +2471,11 @@ package body Exp_Util is
else
Set_Condition_Actions (P, Ins_Actions);
- -- Set the parent of the insert actions explicitly.
- -- This is not a syntactic field, but we need the
- -- parent field set, in particular so that freeze
- -- can understand that it is dealing with condition
- -- actions, and properly insert the freezing actions.
+ -- Set the parent of the insert actions explicitly. This
+ -- is not a syntactic field, but we need the parent field
+ -- set, in particular so that freeze can understand that
+ -- it is dealing with condition actions, and properly
+ -- insert the freezing actions.
Set_Parent (Ins_Actions, P);
Analyze_List (Condition_Actions (P));
@@ -2574,6 +2581,7 @@ package body Exp_Util is
-- subsequent use in the back end: within a package spec the
-- loop is part of the elaboration procedure and is only
-- elaborated during the second pass.
+
-- If the loop comes from source, or the entity is local to
-- the loop itself it must remain within.
@@ -2596,10 +2604,9 @@ package body Exp_Util is
return;
end if;
- -- A special case, N_Raise_xxx_Error can act either as a
- -- statement or a subexpression. We tell the difference
- -- by looking at the Etype. It is set to Standard_Void_Type
- -- in the statement case.
+ -- A special case, N_Raise_xxx_Error can act either as a statement
+ -- or a subexpression. We tell the difference by looking at the
+ -- Etype. It is set to Standard_Void_Type in the statement case.
when
N_Raise_xxx_Error =>
@@ -2645,9 +2652,9 @@ package body Exp_Util is
Decl : Node_Id;
begin
- -- Check whether these actions were generated
- -- by a declaration that is part of the loop_
- -- actions for the component_association.
+ -- Check whether these actions were generated by a
+ -- declaration that is part of the loop_ actions
+ -- for the component_association.
Decl := Assoc_Node;
while Present (Decl) loop
@@ -2855,9 +2862,9 @@ package body Exp_Util is
if Nkind (Parent (N)) = N_Subunit then
- -- This is the proper body corresponding to a stub. Insertion
- -- must be done at the point of the stub, which is in the decla-
- -- rative part of the parent unit.
+ -- This is the proper body corresponding to a stub. Insertion must
+ -- be done at the point of the stub, which is in the declarative
+ -- part of the parent unit.
P := Corresponding_Stub (Parent (N));