summaryrefslogtreecommitdiffstats
path: root/contrib/gcc/tree-inline.c
diff options
context:
space:
mode:
authorkan <kan@FreeBSD.org>2002-09-01 20:38:57 +0000
committerkan <kan@FreeBSD.org>2002-09-01 20:38:57 +0000
commit2e25f3a6c57335cba50111faceb0ce2ab59e9bcb (patch)
treec6857d31c36dbd89a881b0229bf38b062797d413 /contrib/gcc/tree-inline.c
parent0895e1acb698e05d503c26bec5471de2e88b7d93 (diff)
downloadFreeBSD-src-2e25f3a6c57335cba50111faceb0ce2ab59e9bcb.zip
FreeBSD-src-2e25f3a6c57335cba50111faceb0ce2ab59e9bcb.tar.gz
Gcc 3.2.1-prerelease from the FSF anoncvs repo gcc-3_2-branch on 1-Sep-2002 00:00:01 EDT.
Diffstat (limited to 'contrib/gcc/tree-inline.c')
-rw-r--r--contrib/gcc/tree-inline.c37
1 files changed, 19 insertions, 18 deletions
diff --git a/contrib/gcc/tree-inline.c b/contrib/gcc/tree-inline.c
index 5aa141a..79f4c52 100644
--- a/contrib/gcc/tree-inline.c
+++ b/contrib/gcc/tree-inline.c
@@ -762,6 +762,7 @@ expand_call_inline (tp, walk_subtrees, data)
inline_data *id;
tree t;
tree expr;
+ tree stmt;
tree chain;
tree fn;
tree scope_stmt;
@@ -853,10 +854,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;
@@ -871,7 +872,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. */
@@ -906,8 +907,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. */
@@ -915,34 +916,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);
OpenPOWER on IntegriCloud