re PR tree-optimization/71405 (ICE on valid C++ code at -Os and above on x86_64-linux-gnu: verify_gimple failed)

PR tree-optimization/71405
	* tree-ssa.c (execute_update_addresses_taken): For clobber with
	incompatible type, build a new clobber with the right type instead
	of building a VIEW_CONVERT_EXPR around it.

	* g++.dg/torture/pr71405.C: New test.

From-SVN: r237091
This commit is contained in:
Jakub Jelinek 2016-06-04 16:50:57 +02:00 committed by Jakub Jelinek
parent 5681284549
commit 1927a96372
4 changed files with 44 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2016-06-04 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/71405
* tree-ssa.c (execute_update_addresses_taken): For clobber with
incompatible type, build a new clobber with the right type instead
of building a VIEW_CONVERT_EXPR around it.
2016-06-04 Oleg Endo <olegendo@gcc.gnu.org>
PR tree-optimization/52171

View File

@ -1,3 +1,8 @@
2016-06-04 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/71405
* g++.dg/torture/pr71405.C: New test.
2016-06-04 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/70202

View File

@ -0,0 +1,22 @@
// PR tree-optimization/71405
// { dg-do compile }
struct C
{
C () {}
int i;
};
void *
operator new (__SIZE_TYPE__ x, void *y)
{
return y;
}
int
main ()
{
int a;
new (&a) C;
return a;
}

View File

@ -1622,9 +1622,16 @@ execute_update_addresses_taken (void)
if (gimple_assign_lhs (stmt) != lhs
&& !useless_type_conversion_p (TREE_TYPE (lhs),
TREE_TYPE (rhs)))
rhs = fold_build1 (VIEW_CONVERT_EXPR,
TREE_TYPE (lhs), rhs);
{
if (gimple_clobber_p (stmt))
{
rhs = build_constructor (TREE_TYPE (lhs), NULL);
TREE_THIS_VOLATILE (rhs) = 1;
}
else
rhs = fold_build1 (VIEW_CONVERT_EXPR,
TREE_TYPE (lhs), rhs);
}
if (gimple_assign_lhs (stmt) != lhs)
gimple_assign_set_lhs (stmt, lhs);