From: Martin Jambor Date: Tue, 16 Jun 2009 10:16:40 +0000 (+0200) Subject: re PR tree-optimization/40432 (verify_stmts failed with -O2: non-register as LHS... X-Git-Tag: releases/gcc-4.5.0~5193 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0ec19b8c10ff2565ff2ffbff4d98fa3162d297d5;p=thirdparty%2Fgcc.git re PR tree-optimization/40432 (verify_stmts failed with -O2: non-register as LHS of unary operation) 2009-06-16 Martin Jambor PR tree-optimization/40432 * tree-sra.c (sra_modify_assign): When creating VIEW_CONVERT_EXPR, check whether we need to force gimple register operand. * testsuite/gcc.c-torture/compile/pr40432.c: New file. From-SVN: r148522 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 36aa10bedeb3..b0164814370d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-06-16 Martin Jambor + + PR tree-optimization/40432 + * tree-sra.c (sra_modify_assign): When creating VIEW_CONVERT_EXPR, + check whether we need to force gimple register operand. + 2009-06-16 Martin Jambor PR tree-optimization/40413 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d882c6cb1600..02f87d058ede 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2009-06-16 Martin Jambor + + * testsuite/gcc.c-torture/compile/pr40432.c: New file. + 2009-06-16 Martin Jambor * testsuite/gfortran.fortran-torture/compile/pr40413.f90: New file. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr40432.c b/gcc/testsuite/gcc.c-torture/compile/pr40432.c new file mode 100644 index 000000000000..767f59498870 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr40432.c @@ -0,0 +1,17 @@ +/* Test that SRA produces valid gimple when handling both type punning by means + of VCE and creating an access to a union. */ + +union U { + struct something *sth; + void *nothing; +}; + +void +foo (union U *target, void *p) +{ + union U u; + + u.nothing = p; + *target = u; + return; +} diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index ddb015c23971..a2f783afaede 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -2096,7 +2096,11 @@ sra_modify_assign (gimple *stmt, gimple_stmt_iterator *gsi, rhs = expr; } if (!useless_type_conversion_p (TREE_TYPE (lhs), TREE_TYPE (rhs))) - rhs = fold_build1 (VIEW_CONVERT_EXPR, TREE_TYPE (lhs), rhs); + { + rhs = fold_build1 (VIEW_CONVERT_EXPR, TREE_TYPE (lhs), rhs); + if (!is_gimple_reg (lhs)) + force_gimple_rhs = true; + } } if (force_gimple_rhs)