aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/ChangeLog7
-rw-r--r--gcc/ada/trans.c23
2 files changed, 24 insertions, 6 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 55b06a0..697cdb3 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,10 @@
+2004-04-22 Laurent GUERBY <laurent@guerby.net>
+
+ PR optimization/14984
+ PR optimization/14985
+ * trans.c (gigi): Fix non determinism leading to bootstrap
+ comparison failures.
+
2004-04-21 Pascal Obry <obry@gnat.com>
* adaint.c (__gnat_portable_spawn): Quote first argument (argv[0])
diff --git a/gcc/ada/trans.c b/gcc/ada/trans.c
index 9c5b3f5..8b48545 100644
--- a/gcc/ada/trans.c
+++ b/gcc/ada/trans.c
@@ -2112,8 +2112,11 @@ tree_transform (Node_Id gnat_node)
for (gnat_temp = First (Elsif_Parts (gnat_node));
Present (gnat_temp); gnat_temp = Next (gnat_temp))
{
- tree gnu_elseif
- = build_nt (IF_STMT, gnat_to_gnu (Condition (gnat_temp)),
+ tree gnu_cond, gnu_elseif;
+
+ gnu_cond = gnat_to_gnu (Condition (gnat_temp));
+ gnu_elseif
+ = build_nt (IF_STMT, gnu_cond,
build_block_stmt (Then_Statements (gnat_temp)),
NULL_TREE, NULL_TREE);
@@ -2123,10 +2126,18 @@ tree_transform (Node_Id gnat_node)
gnu_result = gnu_elseif;
}
- gnu_result = build_nt (IF_STMT, gnat_to_gnu (Condition (gnat_node)),
- build_block_stmt (Then_Statements (gnat_node)),
- nreverse (gnu_result),
- build_block_stmt (Else_Statements (gnat_node)));
+ {
+ tree gnu_cond, then_block, else_block;
+
+ gnu_cond = gnat_to_gnu (Condition (gnat_node));
+ then_block = build_block_stmt (Then_Statements (gnat_node));
+ else_block = build_block_stmt (Else_Statements (gnat_node));
+
+ gnu_result = build_nt (IF_STMT, gnu_cond,
+ then_block,
+ nreverse (gnu_result),
+ else_block);
+ }
break;
case N_Case_Statement: