+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.
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)
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;
}
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);
}