2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2025-04-15 12:50:59 +08:00

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
This commit is contained in:
Richard Guenther 2011-03-17 14:59:00 +00:00 committed by Richard Biener
parent 7c71147df3
commit 1bce4ff313
4 changed files with 55 additions and 7 deletions

@ -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

@ -1,3 +1,8 @@
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

@ -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;
}

@ -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);