diff options
author | Richard Guenther <rguenther@suse.de> | 2011-03-17 14:59:00 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2011-03-17 14:59:00 +0000 |
commit | 1bce4ff313bf2e2c9e942df52b494bf22886f163 (patch) | |
tree | 19bd7dee07e0dcd9a4bc23e10fac377ef22b686a | |
parent | 7c71147df33fe3ee5e8352fba3d6cfbc15810604 (diff) | |
download | gcc-1bce4ff313bf2e2c9e942df52b494bf22886f163.zip gcc-1bce4ff313bf2e2c9e942df52b494bf22886f163.tar.gz gcc-1bce4ff313bf2e2c9e942df52b494bf22886f163.tar.bz2 |
re PR tree-optimization/48134 (ICE: in refs_may_alias_p_1, at tree-ssa-alias.c:1085 with custom flags)
2011-03-17 Richard Guenther <rguenther@suse.de>
PR middle-end/48134
* tree-ssa.c (insert_debug_temp_for_var_def): If we propagated
a value make sure to fold the statement.
* gcc.dg/pr48134.c: New testcase.
From-SVN: r171098
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr48134.c | 31 | ||||
-rw-r--r-- | gcc/tree-ssa.c | 20 |
4 files changed, 55 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bc80f7a..298815d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-03-17 Richard Guenther <rguenther@suse.de> + + PR middle-end/48134 + * tree-ssa.c (insert_debug_temp_for_var_def): If we propagated + a value make sure to fold the statement. + 2011-03-17 Chung-Lin Tang <cltang@codesourcery.com> PR target/43872 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a7d8749..20ba8d6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2011-03-17 Richard Guenther <rguenther@suse.de> + PR middle-end/48134 + * gcc.dg/pr48134.c: New testcase. + +2011-03-17 Richard Guenther <rguenther@suse.de> + PR middle-end/48165 * g++.dg/torture/pr48165.C: New testcase. diff --git a/gcc/testsuite/gcc.dg/pr48134.c b/gcc/testsuite/gcc.dg/pr48134.c new file mode 100644 index 0000000..8dc5a6d --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr48134.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fstack-check=specific -fno-tree-dse -fno-tree-fre -fno-tree-loop-optimize -g" } */ + +struct S +{ + int w, z; +}; +struct T +{ + struct S s; +}; + +int i; + +static inline struct S +bar (struct S x) +{ + i++; + return x; +} + +int +foo (struct T t, struct S s) +{ + struct S *c = &s; + if (i) + c = &t.s; + t.s.w = 3; + s = bar (*c); + return t.s.w; +} diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index e7e3edc..d542e0a 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -455,13 +455,19 @@ insert_debug_temp_for_var_def (gimple_stmt_iterator *gsi, tree var) continue; if (value) - FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter) - /* unshare_expr is not needed here. vexpr is either a - SINGLE_RHS, that can be safely shared, some other RHS - that was unshared when we found it had a single debug - use, or a DEBUG_EXPR_DECL, that can be safely - shared. */ - SET_USE (use_p, value); + { + FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter) + /* unshare_expr is not needed here. vexpr is either a + SINGLE_RHS, that can be safely shared, some other RHS + that was unshared when we found it had a single debug + use, or a DEBUG_EXPR_DECL, that can be safely + shared. */ + SET_USE (use_p, value); + /* If we didn't replace uses with a debug decl fold the + resulting expression. Otherwise we end up with invalid IL. */ + if (TREE_CODE (value) != DEBUG_EXPR_DECL) + fold_stmt_inplace (stmt); + } else gimple_debug_bind_reset_value (stmt); |