diff options
author | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-01-08 16:01:12 +0000 |
---|---|---|
committer | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-01-08 16:01:12 +0000 |
commit | 1fe75cf21288105fe5628a856f90440a77f614f0 (patch) | |
tree | a6a87fb093cb967de90353ff866ccad75a8602eb /gcc/cp/cvt.c | |
parent | 74a96ca91ee8e189726369fbad1179c50826148c (diff) | |
download | gcc-1fe75cf21288105fe5628a856f90440a77f614f0.tar.gz |
PR c++/68983 (BE)
PR c++/67557
gcc/
* function.c (assign_temp): Guard against TREE_ADDRESSABLE types here.
* expr.c (store_field): Not here.
* tree-cfgcleanup.c (fixup_noreturn_call): Don't clear LHS of a
call with TREE_ADDRESSABLE type.
* tree-cfg.c (verify_gimple_call): Adjust.
gcc/cp/
* cvt.c (convert_to_void): Don't strip a TARGET_EXPR of
TREE_ADDRESSABLE type.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@232167 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cp/cvt.c')
-rw-r--r-- | gcc/cp/cvt.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index d79f13bce70..f381f9b3800 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -1229,11 +1229,12 @@ convert_to_void (tree expr, impl_conv_void implicit, tsubst_flags_t complain) case TARGET_EXPR: /* Don't bother with the temporary object returned from a function if - we don't use it and don't need to destroy it. We'll still + we don't use it, don't need to destroy it, and won't abort in + assign_temp. We'll still allocate space for it in expand_call or declare_return_variable, but we don't need to track it through all the tree phases. */ if (TARGET_EXPR_IMPLICIT_P (expr) - && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (expr))) + && !TREE_ADDRESSABLE (TREE_TYPE (expr))) { tree init = TARGET_EXPR_INITIAL (expr); if (TREE_CODE (init) == AGGR_INIT_EXPR |