summaryrefslogtreecommitdiff
path: root/gcc/fortran/trans.c
diff options
context:
space:
mode:
authorpbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4>2004-06-03 21:56:54 +0000
committerpbrook <pbrook@138bc75d-0d04-0410-961f-82ee72b054a4>2004-06-03 21:56:54 +0000
commit150fb0902035a45586e54f9de72532f317b710a0 (patch)
treeb1aabc44d7c6c669c3d4f91ba255d61cc007e6e0 /gcc/fortran/trans.c
parentd287e3d549a7fedea2bba482e0e5c3bfc6d8d6ae (diff)
downloadgcc-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.c28
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);
}