mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-25 09:40:36 +08:00
re PR c++/82159 (ICE: in assign_temp, at function.c:961)
PR c++/82159 * gimplify.c (gimplify_modify_expr): Don't optimize away zero sized lhs from calls if the lhs has addressable type. * g++.dg/opt/pr82159.C: New test. From-SVN: r253230
This commit is contained in:
parent
99124c31f9
commit
b55c7343f0
@ -1,3 +1,9 @@
|
||||
2017-09-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/82159
|
||||
* gimplify.c (gimplify_modify_expr): Don't optimize away zero sized
|
||||
lhs from calls if the lhs has addressable type.
|
||||
|
||||
2017-09-27 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* graphite.h (scop::max_alias_set): New member.
|
||||
|
@ -5479,7 +5479,12 @@ gimplify_modify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
|
||||
side as statements and throw away the assignment. Do this after
|
||||
gimplify_modify_expr_rhs so we handle TARGET_EXPRs of addressable
|
||||
types properly. */
|
||||
if (zero_sized_type (TREE_TYPE (*from_p)) && !want_value)
|
||||
if (zero_sized_type (TREE_TYPE (*from_p))
|
||||
&& !want_value
|
||||
/* Don't do this for calls that return addressable types, expand_call
|
||||
relies on those having a lhs. */
|
||||
&& !(TREE_ADDRESSABLE (TREE_TYPE (*from_p))
|
||||
&& TREE_CODE (*from_p) == CALL_EXPR))
|
||||
{
|
||||
gimplify_stmt (from_p, pre_p);
|
||||
gimplify_stmt (to_p, pre_p);
|
||||
|
@ -1,3 +1,8 @@
|
||||
2017-09-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/82159
|
||||
* g++.dg/opt/pr82159.C: New test.
|
||||
|
||||
2017-09-27 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
|
||||
|
||||
* gcc.dg/vect/pr65947-9.c: Use signed char explicitly.
|
||||
|
18
gcc/testsuite/g++.dg/opt/pr82159.C
Normal file
18
gcc/testsuite/g++.dg/opt/pr82159.C
Normal file
@ -0,0 +1,18 @@
|
||||
// PR c++/82159
|
||||
// { dg-do compile }
|
||||
// { dg-options "" }
|
||||
|
||||
template<int N>
|
||||
struct S
|
||||
{
|
||||
~S () {}
|
||||
template<int M> S<M> foo () { return S<M> (); }
|
||||
unsigned char data[N];
|
||||
};
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
S<16> d;
|
||||
S<0> t = d.foo<0> ();
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user