From 150fb0902035a45586e54f9de72532f317b710a0 Mon Sep 17 00:00:00 2001 From: pbrook Date: Thu, 3 Jun 2004 21:56:54 +0000 Subject: [PATCH] * 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 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/trans.c | 28 ++++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index fefddc2273e..3cb938c36af 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2004-05-03 Paul Brook + + * 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 * trans-array.c: Fix spelling in comments. 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); } -- 2.11.4.GIT