aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-inline.c
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2006-02-09 04:54:36 -0500
committerJason Merrill <jason@gcc.gnu.org>2006-02-09 04:54:36 -0500
commitdae7ec874f5e46fccf259c87fd756a0e10375e63 (patch)
tree2e7796711ab7dc7b1bc13550933b9b8d077c098e /gcc/tree-inline.c
parent845d2a4b7d4a91d82624d9877e275b46746511fe (diff)
downloadgcc-dae7ec874f5e46fccf259c87fd756a0e10375e63.zip
gcc-dae7ec874f5e46fccf259c87fd756a0e10375e63.tar.gz
gcc-dae7ec874f5e46fccf259c87fd756a0e10375e63.tar.bz2
re PR c++/25979 (incorrect codegen for conditional [SVO issue])
PR c++/25979 * tree.def: Elaborate on difference from MODIFY_EXPR. * doc/c-tree.texi (INIT_EXPR): Likewise. * gimplify.c (internal_get_tmp_var): Use INIT_EXPR. (gimplify_decl_expr, gimplify_init_ctor_eval): Likewise. (gimplify_target_expr): Likewise. (gimplify_cond_expr): Remove target handling. (gimplify_modify_expr): Don't clobber INIT_EXPR code here. (gimplify_expr): Clobber it here. (gimplify_modify_expr_rhs): Push assignment into COND_EXPR here. Do return slot optimization if we have an INIT_EXPR. PR tree-opt/24365 * tree-inline.c (declare_return_variable): Also clear DECL_COMPLEX_GIMPLE_REG_P as needed in the modify_dest case. PR c++/16405 * gimplify.c (gimplify_modify_expr_rhs): Re-enable *& handling. PR middle-end/22439 * gimplify.c (gimplify_one_sizepos): Fix typo. From-SVN: r110789
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r--gcc/tree-inline.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 07085b1..f9ce09b 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -1222,6 +1222,9 @@ declare_return_variable (copy_body_data *id, tree return_slot_addr,
use_it = false;
else if (is_global_var (base_m))
use_it = false;
+ else if (TREE_CODE (TREE_TYPE (base_m)) == COMPLEX_TYPE
+ && !DECL_COMPLEX_GIMPLE_REG_P (result))
+ DECL_COMPLEX_GIMPLE_REG_P (base_m) = 0;
else if (!TREE_ADDRESSABLE (base_m))
use_it = true;
}