]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR bootstrap/83396 (Bootstrap failures with Statement Frontiers)
authorJakub Jelinek <jakub@redhat.com>
Thu, 14 Dec 2017 11:02:37 +0000 (12:02 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 14 Dec 2017 11:02:37 +0000 (12:02 +0100)
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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr83396.c [new file with mode: 0644]
gcc/var-tracking.c

index f4b61eb6b1c9fab09bf7d2bf1f1cdddd538addc4..504b331ec8afff7046b5184472e99efad5a3d9d7 100644 (file)
@@ -1,5 +1,11 @@
 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
index 939e4a9a149a6ec81cf8f498975bedbd95896f67..ff3747961b54468a101cde30be7a1f0793e72ec0 100644 (file)
@@ -1,5 +1,8 @@
 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.
diff --git a/gcc/testsuite/gcc.dg/pr83396.c b/gcc/testsuite/gcc.dg/pr83396.c
new file mode 100644 (file)
index 0000000..7d8220e
--- /dev/null
@@ -0,0 +1,12 @@
+/* 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;
+}
index 8e500b144712a2007f8f171486bfb201498663ad..b556e79a18d62ee0e22053579b581ce21c79fa04 100644 (file)
@@ -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);