diff options
| author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-10-01 16:23:23 +0000 |
|---|---|---|
| committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-10-01 16:23:23 +0000 |
| commit | 1f3bd2cbf8b445878c2f41fd30ce791586789202 (patch) | |
| tree | 0d6ab17c627566b006769ae664f2d3297a608ae0 | |
| parent | 2df2af5a7b827bf51a646fe9c0850f4ef3225338 (diff) | |
| download | ppe42-gcc-1f3bd2cbf8b445878c2f41fd30ce791586789202.tar.gz ppe42-gcc-1f3bd2cbf8b445878c2f41fd30ce791586789202.zip | |
2008-10-01 Richard Guenther <rguenther@suse.de>
PR tree-optimization/37617
* tree-ssa-pre.c (create_expression_by_pieces): During FRE
do not add to the NEW_SETS.
* gcc.c-torture/compile/pr37617.c: New testcase.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@140816 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr37617.c | 19 | ||||
| -rw-r--r-- | gcc/tree-ssa-pre.c | 3 |
4 files changed, 32 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d20066c4cbb..d053f30da87 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2008-10-01 Richard Guenther <rguenther@suse.de> + PR tree-optimization/37617 + * tree-ssa-pre.c (create_expression_by_pieces): During FRE + do not add to the NEW_SETS. + +2008-10-01 Richard Guenther <rguenther@suse.de> + PR middle-end/37285 * tree-vrp.c (execute_vrp): If we optimized away the default case make sure to promote the label that got in place of it diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 16a233a5c7f..d2f70a06b65 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2008-10-01 Richard Guenther <rguenther@suse.de> + PR tree-optimization/37617 + * gcc.c-torture/compile/pr37617.c: New testcase. + +2008-10-01 Richard Guenther <rguenther@suse.de> + PR middle-end/37285 * gcc.c-torture/compile/pr37285.c: New testcase. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr37617.c b/gcc/testsuite/gcc.c-torture/compile/pr37617.c new file mode 100644 index 00000000000..901b8cabf22 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr37617.c @@ -0,0 +1,19 @@ +typedef union +{ + char *string; + double dval; + float fval; +} yystype; +char *f(void) +{ + yystype tok; + tok.dval = 0; + return (tok.string); +} +char *f1(void) +{ + yystype tok; + tok.fval = 0; + return (tok.string); +} + diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index cd344af2d10..84c884b060c 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -2885,7 +2885,8 @@ create_expression_by_pieces (basic_block block, pre_expr expr, VN_INFO (forcedname)->value_id = get_next_value_id (); nameexpr = get_or_alloc_expr_for_name (forcedname); add_to_value (VN_INFO (forcedname)->value_id, nameexpr); - bitmap_value_replace_in_set (NEW_SETS (block), nameexpr); + if (!in_fre) + bitmap_value_replace_in_set (NEW_SETS (block), nameexpr); bitmap_value_replace_in_set (AVAIL_OUT (block), nameexpr); } mark_symbols_for_renaming (stmt); |

