diff options
author | Jason Merrill <jason@redhat.com> | 2001-06-18 12:15:12 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2001-06-18 12:15:12 -0400 |
commit | 0d97bf4c2c4e599beee17c3a99f6dfdd8884d09a (patch) | |
tree | 70263e15f7a28d4f44a057ee1783e8a0095c5f9a /gcc/cp/cp-tree.h | |
parent | 923cbdc322ee080c02b94a95eece0618a2a78b47 (diff) | |
download | gcc-0d97bf4c2c4e599beee17c3a99f6dfdd8884d09a.zip gcc-0d97bf4c2c4e599beee17c3a99f6dfdd8884d09a.tar.gz gcc-0d97bf4c2c4e599beee17c3a99f6dfdd8884d09a.tar.bz2 |
Implement the Named Return Value optimization.
* c-common.h (RETURN_NULLIFIED_P): New macro.
* c-semantics.c (genrtl_return_stmt): Check it.
* cp-tree.h (struct cp_language_function): Add x_return_value.
(current_function_return_value): Now a macro.
* decl.c: Don't define it.
(define_label, finish_case_label): Don't clear it.
(init_decl_processing): Don't register it with GC.
* semantics.c (genrtl_finish_function): Don't check it for
no_return_label. Copy the RTL from the return value to
current_function_return_value and walk, calling...
(nullify_returns_r): ...this new fn.
* typeck.c (check_return_expr): Set current_function_return_value.
* expr.c (clear_storage): Set TREE_NOTHROW on the decl for memset.
(emit_block_move): Likewise.
From-SVN: r43445
Diffstat (limited to 'gcc/cp/cp-tree.h')
-rw-r--r-- | gcc/cp/cp-tree.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 5da11ee..9910624 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -863,6 +863,7 @@ struct cp_language_function tree x_eh_spec_block; tree x_in_charge_parm; tree x_vtt_parm; + tree x_return_value; tree *x_vcalls_possible_p; @@ -953,7 +954,12 @@ struct cp_language_function #define in_function_try_handler cp_function_chain->in_function_try_handler -extern tree current_function_return_value; +/* Expression always returned from function, or error_mark_node + otherwise, for use by the automatic named return value optimization. */ + +#define current_function_return_value \ + (cp_function_chain->x_return_value) + extern tree global_namespace; #define ansi_opname(CODE) \ |