diff options
author | Paul Brook <paul@codesourcery.com> | 2004-06-03 21:56:54 +0000 |
---|---|---|
committer | Paul Brook <pbrook@gcc.gnu.org> | 2004-06-03 21:56:54 +0000 |
commit | 7c87eac60d08f0818800e48d999a005ef6a34ece (patch) | |
tree | b1aabc44d7c6c669c3d4f91ba255d61cc007e6e0 /gcc | |
parent | 1341376000609bcecf58fd137367f615471311d1 (diff) | |
download | gcc-7c87eac60d08f0818800e48d999a005ef6a34ece.zip gcc-7c87eac60d08f0818800e48d999a005ef6a34ece.tar.gz gcc-7c87eac60d08f0818800e48d999a005ef6a34ece.tar.bz2 |
trans.c (gfc_finish_block, [...]): Build statement lists instead of compound expr chains.
* trans.c (gfc_finish_block, gfc_add_expr_to_block): Build statement
lists instead of compound expr chains.
(gfc_trans_code): Annotate statement lists.
From-SVN: r82604
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/trans.c | 28 |
2 files changed, 30 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index fefddc2..3cb938c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2004-05-03 Paul Brook <paul@codesourcery.com> + + * trans.c (gfc_finish_block, gfc_add_expr_to_block): Build statement + lists instead of compound expr chains. + (gfc_trans_code): Annotate statement lists. + 2004-06-03 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de> * trans-array.c: Fix spelling in comments. diff --git a/gcc/fortran/trans.c b/gcc/fortran/trans.c index 6a42b03..bb994a7 100644 --- a/gcc/fortran/trans.c +++ b/gcc/fortran/trans.c @@ -215,7 +215,10 @@ gfc_finish_block (stmtblock_t * stmtblock) tree expr; tree block; - expr = rationalize_compound_expr (stmtblock->head); + expr = stmtblock->head; + if (!expr) + expr = build_empty_stmt (); + stmtblock->head = NULL_TREE; if (stmtblock->has_scope) @@ -387,10 +390,23 @@ gfc_add_expr_to_block (stmtblock_t * block, tree expr) if (expr == NULL_TREE || IS_EMPTY_STMT (expr)) return; - expr = fold (expr); + if (TREE_CODE (expr) != STATEMENT_LIST) + expr = fold (expr); + if (block->head) - block->head = build_v (COMPOUND_EXPR, block->head, expr); + { + if (TREE_CODE (block->head) != STATEMENT_LIST) + { + tree tmp; + + tmp = block->head; + block->head = NULL_TREE; + append_to_statement_list (tmp, &block->head); + } + append_to_statement_list (expr, &block->head); + } else + /* Don't bother creating a list if we only have a single statement. */ block->head = expr; } @@ -592,7 +608,11 @@ gfc_trans_code (gfc_code * code) if (res != NULL_TREE && ! IS_EMPTY_STMT (res)) { - annotate_with_locus (res, input_location); + if (TREE_CODE (res) == STATEMENT_LIST) + annotate_all_with_locus (&res, input_location); + else + annotate_with_locus (res, input_location); + /* Add the new statemment to the block. */ gfc_add_expr_to_block (&block, res); } |