diff options
-rw-r--r-- | gcc/ada/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/ada/trans.c | 23 |
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: |