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:
parent
7c71147df3
commit
1bce4ff313
gcc
@ -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
|
||||
|
31
gcc/testsuite/gcc.dg/pr48134.c
Normal file
31
gcc/testsuite/gcc.dg/pr48134.c
Normal file
@ -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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user