diff options
author | dberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-06-01 21:09:52 +0000 |
---|---|---|
committer | dberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-06-01 21:09:52 +0000 |
commit | 8d0b5876b4c477fbcb89144865a8000111540e73 (patch) | |
tree | d4f7ca4931537b8be923e5340dd653bd48d1d9e9 /gcc/tree-inline.c | |
parent | 23e5207c0625219f3f727bf8ecd8f675f84d085e (diff) | |
download | gcc-8d0b5876b4c477fbcb89144865a8000111540e73.tar.gz |
2002-06-01 Daniel Berlin <dberlin@dberlin.org>
* tree-inline.c (expand_call_inline): Make the statement
expression we generate have a COMPOUND_STMT.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@54153 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r-- | gcc/tree-inline.c | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 5fcd8928af5..94852430d03 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -782,6 +782,7 @@ expand_call_inline (tp, walk_subtrees, data) inline_data *id; tree t; tree expr; + tree stmt; tree chain; tree fn; tree scope_stmt; @@ -873,10 +874,10 @@ expand_call_inline (tp, walk_subtrees, data) for the return statements within the function to jump to. The type of the statement expression is the return type of the function call. */ - expr = build1 (STMT_EXPR, TREE_TYPE (TREE_TYPE (fn)), NULL_TREE); + expr = build1 (STMT_EXPR, TREE_TYPE (TREE_TYPE (fn)), make_node (COMPOUND_STMT)); /* There is no scope associated with the statement-expression. */ STMT_EXPR_NO_SCOPE (expr) = 1; - + stmt = STMT_EXPR_STMT (expr); /* Local declarations will be replaced by their equivalents in this map. */ st = id->decl_map; @@ -891,7 +892,7 @@ expand_call_inline (tp, walk_subtrees, data) parameters. */ expand_calls_inline (&arg_inits, id); /* And add them to the tree. */ - STMT_EXPR_STMT (expr) = chainon (STMT_EXPR_STMT (expr), arg_inits); + COMPOUND_BODY (stmt) = chainon (COMPOUND_BODY (stmt), arg_inits); /* Record the function we are about to inline so that we can avoid recursing into it. */ @@ -926,8 +927,8 @@ expand_call_inline (tp, walk_subtrees, data) SCOPE_BEGIN_P (scope_stmt) = 1; SCOPE_NO_CLEANUPS_P (scope_stmt) = 1; remap_block (scope_stmt, DECL_ARGUMENTS (fn), id); - TREE_CHAIN (scope_stmt) = STMT_EXPR_STMT (expr); - STMT_EXPR_STMT (expr) = scope_stmt; + TREE_CHAIN (scope_stmt) = COMPOUND_BODY (stmt); + COMPOUND_BODY (stmt) = scope_stmt; /* Tell the debugging backends that this block represents the outermost scope of the inlined function. */ @@ -935,34 +936,34 @@ expand_call_inline (tp, walk_subtrees, data) BLOCK_ABSTRACT_ORIGIN (SCOPE_STMT_BLOCK (scope_stmt)) = DECL_ORIGIN (fn); /* Declare the return variable for the function. */ - STMT_EXPR_STMT (expr) - = chainon (STMT_EXPR_STMT (expr), + COMPOUND_BODY (stmt) + = chainon (COMPOUND_BODY (stmt), declare_return_variable (id, &use_stmt)); /* After we've initialized the parameters, we insert the body of the function itself. */ - inlined_body = &STMT_EXPR_STMT (expr); + inlined_body = &COMPOUND_BODY (stmt); while (*inlined_body) inlined_body = &TREE_CHAIN (*inlined_body); *inlined_body = copy_body (id); - /* Close the block for the parameters. */ - scope_stmt = build_stmt (SCOPE_STMT, DECL_INITIAL (fn)); - SCOPE_NO_CLEANUPS_P (scope_stmt) = 1; - remap_block (scope_stmt, NULL_TREE, id); - STMT_EXPR_STMT (expr) - = chainon (STMT_EXPR_STMT (expr), scope_stmt); - /* After the body of the function comes the RET_LABEL. This must come before we evaluate the returned value below, because that evalulation may cause RTL to be generated. */ - STMT_EXPR_STMT (expr) - = chainon (STMT_EXPR_STMT (expr), + COMPOUND_BODY (stmt) + = chainon (COMPOUND_BODY (stmt), build_stmt (LABEL_STMT, id->ret_label)); /* Finally, mention the returned value so that the value of the statement-expression is the returned value of the function. */ - STMT_EXPR_STMT (expr) = chainon (STMT_EXPR_STMT (expr), use_stmt); + COMPOUND_BODY (stmt) = chainon (COMPOUND_BODY (stmt), use_stmt); + + /* Close the block for the parameters. */ + scope_stmt = build_stmt (SCOPE_STMT, DECL_INITIAL (fn)); + SCOPE_NO_CLEANUPS_P (scope_stmt) = 1; + remap_block (scope_stmt, NULL_TREE, id); + COMPOUND_BODY (stmt) + = chainon (COMPOUND_BODY (stmt), scope_stmt); /* Clean up. */ splay_tree_delete (id->decl_map); |