diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-08-12 17:57:49 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-08-12 17:57:49 +0000 |
commit | da143e714dee4a1a583e122a09bcb68a22957ad8 (patch) | |
tree | 8ea0e258c24d36033da004d3d69b1955d768eef5 | |
parent | 77cdb8376df695de344ff9ef9d0a670be7aede8e (diff) | |
download | gcc-da143e714dee4a1a583e122a09bcb68a22957ad8.tar.gz |
PR tree-optimization/37084
* tree-inline.c (copy_bb): Call gimple_regimplify_operands
if id->regimplify, don't assume stmt is a cast assignment.
* g++.dg/tree-ssa/pr37084.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@139028 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/tree-ssa/pr37084.C | 16 | ||||
-rw-r--r-- | gcc/tree-inline.c | 7 |
4 files changed, 30 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1b41d51b641..f60e34b232f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-08-12 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/37084 + * tree-inline.c (copy_bb): Call gimple_regimplify_operands + if id->regimplify, don't assume stmt is a cast assignment. + 2008-08-12 Anatoly Sokolov <aesok@post.ru> * final.c (final_scan_insn): Use app_enable/app_disable functions. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 427c066f40e..692e83f993c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-08-12 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/37084 + * g++.dg/tree-ssa/pr37084.C: New test. + 2008-08-12 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> * gcc.c-torture/execute/20031003-1.c (main): Update test to diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr37084.C b/gcc/testsuite/g++.dg/tree-ssa/pr37084.C new file mode 100644 index 00000000000..8fceb0cbbf3 --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/pr37084.C @@ -0,0 +1,16 @@ +// PR tree-optimization/37084 +// { dg-do compile } +// { dg-options "-O" } + +struct A +{ + A (); +}; + +inline A +foo () +{ + return A (); +} + +const A a (foo ()); diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 4eeabb141b9..ef9e75c88c6 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -1260,10 +1260,9 @@ copy_bb (copy_body_data *id, basic_block bb, int frequency_scale, /* With return slot optimization we can end up with non-gimple (foo *)&this->m, fix that here. */ - if ((is_gimple_assign (stmt) - && gimple_assign_rhs_code (stmt) == NOP_EXPR - && !is_gimple_val (gimple_assign_rhs1 (stmt))) - || id->regimplify) + if (is_gimple_assign (stmt) + && gimple_assign_rhs_code (stmt) == NOP_EXPR + && !is_gimple_val (gimple_assign_rhs1 (stmt))) { tree new_rhs; new_rhs = force_gimple_operand_gsi (©_gsi, |