diff options
author | Richard Guenther <rguenther@suse.de> | 2008-10-01 16:23:23 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2008-10-01 16:23:23 +0000 |
commit | c8ce33fa7fec7d4d0c0e2a8b8bb535b6d5cba0e0 (patch) | |
tree | 0d6ab17c627566b006769ae664f2d3297a608ae0 | |
parent | 256f88c6c0f6ffe9083a4fc3fb4eded341c772a4 (diff) | |
download | gcc-c8ce33fa7fec7d4d0c0e2a8b8bb535b6d5cba0e0.tar.gz |
re PR tree-optimization/37617 (ICE on valid code)
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.
From-SVN: r140816
-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); |