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