diff options
author | pbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-06-03 21:56:54 +0000 |
---|---|---|
committer | pbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-06-03 21:56:54 +0000 |
commit | 150fb0902035a45586e54f9de72532f317b710a0 (patch) | |
tree | b1aabc44d7c6c669c3d4f91ba255d61cc007e6e0 /gcc/fortran/trans.c | |
parent | d287e3d549a7fedea2bba482e0e5c3bfc6d8d6ae (diff) | |
download | gcc-150fb0902035a45586e54f9de72532f317b710a0.tar.gz |
* trans.c (gfc_finish_block, gfc_add_expr_to_block): Build statement
lists instead of compound expr chains.
(gfc_trans_code): Annotate statement lists.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@82604 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/trans.c')
-rw-r--r-- | gcc/fortran/trans.c | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/gcc/fortran/trans.c b/gcc/fortran/trans.c index 6a42b03935e..bb994a7f6da 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); } |