aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2004-06-03 21:56:54 +0000
committerPaul Brook <pbrook@gcc.gnu.org>2004-06-03 21:56:54 +0000
commit7c87eac60d08f0818800e48d999a005ef6a34ece (patch)
treeb1aabc44d7c6c669c3d4f91ba255d61cc007e6e0 /gcc
parent1341376000609bcecf58fd137367f615471311d1 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/fortran/trans.c28
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);
}