diff options
| -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 d20066c..d053f30 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 16a233a..d2f70a0 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 0000000..901b8ca --- /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 cd344af..84c884b 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); |
