Commit 6dfb83e8 by Jakub Jelinek Committed by Jakub Jelinek

re PR bootstrap/83396 (Bootstrap failures with Statement Frontiers)

	PR bootstrap/83396
	* var-tracking.c (vt_initialize): Ignore non-DEBUG_INSNs outside of
	basic blocks.  Assert debug bind insns don't appear outside of bbs,
	don't reset them.  Assert insns without BLOCK_FOR_INSN are outside of
	bb.  Simplify.

	* gcc.dg/pr83396.c: New test.

From-SVN: r255627
parent aa215959
2017-12-14 Jakub Jelinek <jakub@redhat.com>
PR bootstrap/83396
* var-tracking.c (vt_initialize): Ignore non-DEBUG_INSNs outside of
basic blocks. Assert debug bind insns don't appear outside of bbs,
don't reset them. Assert insns without BLOCK_FOR_INSN are outside of
bb. Simplify.
PR tree-optimization/83198
* gimple-ssa-sprintf.c (format_floating): Set type solely based on
dir.modifier, regardless of TREE_TYPE (arg). Assume non-REAL_CST
2017-12-14 Jakub Jelinek <jakub@redhat.com>
PR bootstrap/83396
* gcc.dg/pr83396.c: New test.
PR tree-optimization/83198
* gcc.dg/pr83198.c: New test.
* gcc.dg/tree-ssa/pr83198.c: New test.
......
/* PR bootstrap/83396 */
/* { dg-do compile } */
/* { dg-options "-O2 -g" } */
int bar (int);
int baz (int);
int
foo (int x)
{
return bar (x) || baz (x) != 0;
}
......@@ -10157,25 +10157,31 @@ vt_initialize (void)
insns that might be before it too. Unfortunately,
BB_HEADER and BB_FOOTER are not set while we run this
pass. */
insn = get_first_insn (bb);
for (rtx_insn *next;
insn != BB_HEAD (bb->next_bb)
? next = NEXT_INSN (insn), true : false;
rtx_insn *next;
bool outside_bb = true;
for (insn = get_first_insn (bb); insn != BB_HEAD (bb->next_bb);
insn = next)
{
if (insn == BB_HEAD (bb))
outside_bb = false;
else if (insn == NEXT_INSN (BB_END (bb)))
outside_bb = true;
next = NEXT_INSN (insn);
if (INSN_P (insn))
{
if (outside_bb)
{
/* Ignore non-debug insns outside of basic blocks. */
if (!DEBUG_INSN_P (insn))
continue;
/* Debug binds shouldn't appear outside of bbs. */
gcc_assert (!DEBUG_BIND_INSN_P (insn));
}
basic_block save_bb = BLOCK_FOR_INSN (insn);
if (!BLOCK_FOR_INSN (insn))
{
gcc_assert (outside_bb);
BLOCK_FOR_INSN (insn) = bb;
gcc_assert (DEBUG_INSN_P (insn));
/* Reset debug insns between basic blocks.
Their location is not reliable, because they
were probably not maintained up to date. */
if (DEBUG_BIND_INSN_P (insn))
INSN_VAR_LOCATION_LOC (insn)
= gen_rtx_UNKNOWN_VAR_LOC ();
}
else
gcc_assert (BLOCK_FOR_INSN (insn) == bb);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment