PR c++/19317
commitea523851e65ca645bcddff0657ed711cd846f9e6
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 23 Jun 2005 14:44:21 +0000 (23 14:44 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 23 Jun 2005 14:44:21 +0000 (23 14:44 +0000)
tree672b804a497a6d4d52b747f00969c6d7b30ebbfb
parent44cb69ffb21cd8ef9163ffbc022ec4195f6201d9
    PR c++/19317
        Leave the return slot target in the MODIFY_EXPR rather than making
        it an argument, but only use it if the CALL_EXPR has a flag set.
        * tree.h (CALL_EXPR_HAS_RETURN_SLOT_ADDR): Rename to
        CALL_EXPR_RETURN_SLOT_OPT.
        * calls.c (expand_call): Adjust.
        * tree-inline.c (expand_call_inline): Adjust.
        * tree-pretty-print.c (dump_generic_node): Adjust.

        And set the flag as appropriate.
        * gimplify.c (gimplify_modify_expr_rhs): Set
        CALL_EXPR_HAS_RETURN_SLOT_ADDR where the LHS is obviously safe.
        * tree-nrv.c (execute_return_slot_opt): Set
        CALL_EXPR_HAS_RETURN_SLOT_ADDR based on escape analysis.
        * tree-pass.h: Declare pass_return_slot.
        * tree-optimize.c (init_tree_optimization_passes): Add it.

        * cp/semantics.c (simplify_aggr_init_expr): Use
        CALL_EXPR_RETURN_SLOT_OPT, not CALL_EXPR_HAS_RETURN_SLOT_ADDR.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@101269 138bc75d-0d04-0410-961f-82ee72b054a4
12 files changed:
gcc/ChangeLog
gcc/calls.c
gcc/cp/ChangeLog
gcc/cp/semantics.c
gcc/gimplify.c
gcc/testsuite/g++.dg/opt/nrv9.C [new file with mode: 0644]
gcc/tree-inline.c
gcc/tree-nrv.c
gcc/tree-optimize.c
gcc/tree-pass.h
gcc/tree-pretty-print.c
gcc/tree.h