aboutsummaryrefslogtreecommitdiff
path: root/gcc/var-tracking.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-12-14 12:02:37 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2017-12-14 12:02:37 +0100
commit6dfb83e8d8625c1845a3df51e5519d7904700add (patch)
tree8b6055274e6c1b7e00d999b5bdc0829c5665ba9c /gcc/var-tracking.c
parentaa215959c5f6c6ec2e877d976f305eb8c9e08f2c (diff)
downloadgcc-6dfb83e8d8625c1845a3df51e5519d7904700add.zip
gcc-6dfb83e8d8625c1845a3df51e5519d7904700add.tar.gz
gcc-6dfb83e8d8625c1845a3df51e5519d7904700add.tar.bz2
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
Diffstat (limited to 'gcc/var-tracking.c')
-rw-r--r--gcc/var-tracking.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index 8e500b1..b556e79 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -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);