re PR debug/83084 (-fcompare-debug failure on ppc64le)
PR debug/83084 * valtrack.c (propagate_for_debug_subst, propagate_for_debug): Reset debug insns if they would contain UNSPEC_VOLATILE or volatile asm. (dead_debug_insert_temp): Likewise, but also ignore even non-volatile asm. * g++.dg/opt/pr83084.C: New test. From-SVN: r255051
This commit is contained in:
parent
a2998ed1dc
commit
aaa49b45f6
@ -1,5 +1,11 @@
|
||||
2017-11-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/83084
|
||||
* valtrack.c (propagate_for_debug_subst, propagate_for_debug): Reset
|
||||
debug insns if they would contain UNSPEC_VOLATILE or volatile asm.
|
||||
(dead_debug_insert_temp): Likewise, but also ignore even non-volatile
|
||||
asm.
|
||||
|
||||
PR middle-end/82875
|
||||
* optabs.c (expand_doubleword_mult, expand_binop): Before calling
|
||||
expand_binop with *mul_widen_optab, make sure at least one of the
|
||||
|
@ -1,11 +1,12 @@
|
||||
2017-11-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/83084
|
||||
* g++.dg/opt/pr83084.C: New test.
|
||||
|
||||
PR middle-end/82875
|
||||
* gcc.dg/pr82875.c: New test.
|
||||
* gcc.c-torture/compile/pr82875.c: New test.
|
||||
|
||||
2017-11-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/83034
|
||||
* gcc.dg/pr83034.c: New test.
|
||||
|
||||
|
16
gcc/testsuite/g++.dg/opt/pr83084.C
Normal file
16
gcc/testsuite/g++.dg/opt/pr83084.C
Normal file
@ -0,0 +1,16 @@
|
||||
// PR debug/83084
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O2 -fcompare-debug -Wno-return-type" }
|
||||
|
||||
enum E { F };
|
||||
template <E = F> struct A {
|
||||
bool foo ();
|
||||
int b;
|
||||
};
|
||||
template <> bool A<>::foo () {
|
||||
int a;
|
||||
do
|
||||
if (a)
|
||||
return false;
|
||||
while (__atomic_compare_exchange_n (&b, &a, 0, 1, 4, 0));
|
||||
}
|
@ -171,10 +171,13 @@ propagate_for_debug_subst (rtx from, const_rtx old_rtx, void *data)
|
||||
if (REG_P (*iter) && ++cnt > 1)
|
||||
{
|
||||
rtx dval = make_debug_expr_from_rtl (old_rtx);
|
||||
rtx to = pair->to;
|
||||
if (volatile_insn_p (to))
|
||||
to = gen_rtx_UNKNOWN_VAR_LOC ();
|
||||
/* Emit a debug bind insn. */
|
||||
rtx bind
|
||||
= gen_rtx_VAR_LOCATION (GET_MODE (old_rtx),
|
||||
DEBUG_EXPR_TREE_DECL (dval), pair->to,
|
||||
DEBUG_EXPR_TREE_DECL (dval), to,
|
||||
VAR_INIT_STATUS_INITIALIZED);
|
||||
rtx_insn *bind_insn = emit_debug_insn_before (bind, pair->insn);
|
||||
df_insn_rescan (bind_insn);
|
||||
@ -217,6 +220,8 @@ propagate_for_debug (rtx_insn *insn, rtx_insn *last, rtx dest, rtx src,
|
||||
dest, propagate_for_debug_subst, &p);
|
||||
if (loc == INSN_VAR_LOCATION_LOC (insn))
|
||||
continue;
|
||||
if (volatile_insn_p (loc))
|
||||
loc = gen_rtx_UNKNOWN_VAR_LOC ();
|
||||
INSN_VAR_LOCATION_LOC (insn) = loc;
|
||||
df_insn_rescan (insn);
|
||||
}
|
||||
@ -660,6 +665,12 @@ dead_debug_insert_temp (struct dead_debug_local *debug, unsigned int uregno,
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
/* Asm in DEBUG_INSN is never useful, we can't emit debug info for
|
||||
that. And for volatile_insn_p, it is actually harmful
|
||||
- DEBUG_INSNs shouldn't have any side-effects. */
|
||||
else if (GET_CODE (src) == ASM_OPERANDS
|
||||
|| volatile_insn_p (src))
|
||||
set = NULL_RTX;
|
||||
}
|
||||
|
||||
/* ??? Should we try to extract it from a PARALLEL? */
|
||||
|
Loading…
x
Reference in New Issue
Block a user