re PR debug/49602 (verify_ssa failed (definition does not dominate use) with "-O2 -g")
PR debug/49602 * tree-into-ssa.c (rewrite_debug_stmt_uses): Disregard get_current_def return value if it can't be trusted to be the current value of the variable in the current bb. * gcc.dg/pr49602.c: New test. From-SVN: r175818
This commit is contained in:
parent
0d5e0c1bf0
commit
15923c25df
|
@ -1,3 +1,10 @@
|
|||
2011-07-04 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/49602
|
||||
* tree-into-ssa.c (rewrite_debug_stmt_uses): Disregard
|
||||
get_current_def return value if it can't be trusted to be
|
||||
the current value of the variable in the current bb.
|
||||
|
||||
2011-07-04 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/49600
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2011-07-04 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/49602
|
||||
* gcc.dg/pr49602.c: New test.
|
||||
|
||||
2011-07-04 Georg-Johann Lay <avr@gjlay.de>
|
||||
|
||||
PR target/34734
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
/* PR debug/49602 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-g -O2" } */
|
||||
|
||||
static void
|
||||
foo (int *x)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
bar (int *x)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i == 1; ++i)
|
||||
x = 0;
|
||||
foo (x);
|
||||
}
|
|
@ -1343,7 +1343,41 @@ rewrite_debug_stmt_uses (gimple stmt)
|
|||
}
|
||||
}
|
||||
else
|
||||
def = get_current_def (var);
|
||||
{
|
||||
def = get_current_def (var);
|
||||
/* Check if get_current_def can be trusted. */
|
||||
if (def)
|
||||
{
|
||||
basic_block bb = gimple_bb (stmt);
|
||||
basic_block def_bb
|
||||
= SSA_NAME_IS_DEFAULT_DEF (def)
|
||||
? NULL : gimple_bb (SSA_NAME_DEF_STMT (def));
|
||||
|
||||
/* If definition is in current bb, it is fine. */
|
||||
if (bb == def_bb)
|
||||
;
|
||||
/* If definition bb doesn't dominate the current bb,
|
||||
it can't be used. */
|
||||
else if (def_bb && !dominated_by_p (CDI_DOMINATORS, bb, def_bb))
|
||||
def = NULL;
|
||||
/* If there is just one definition and dominates the current
|
||||
bb, it is fine. */
|
||||
else if (get_phi_state (var) == NEED_PHI_STATE_NO)
|
||||
;
|
||||
else
|
||||
{
|
||||
struct def_blocks_d *db_p = get_def_blocks_for (var);
|
||||
|
||||
/* If there are some non-debug uses in the current bb,
|
||||
it is fine. */
|
||||
if (bitmap_bit_p (db_p->livein_blocks, bb->index))
|
||||
;
|
||||
/* Otherwise give up for now. */
|
||||
else
|
||||
def = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (def == NULL)
|
||||
{
|
||||
gimple_debug_bind_reset_value (stmt);
|
||||
|
|
Loading…
Reference in New Issue