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:
Jakub Jelinek 2017-09-27 16:19:57 +02:00 committed by Jakub Jelinek
parent 99124c31f9
commit b55c7343f0
4 changed files with 35 additions and 1 deletions

View File

@ -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.

View File

@ -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);

View File

@ -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.

View 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> ();
}