tree-cfg.c (verify_gimple_in_cfg): Verify no non-label stmts with the exception of...
authorJakub Jelinek <jakub@redhat.com>
Wed, 13 Dec 2017 18:48:23 +0000 (19:48 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 13 Dec 2017 18:48:23 +0000 (19:48 +0100)
* tree-cfg.c (verify_gimple_in_cfg): Verify no non-label stmts
with the exception of debug begin stmt markers appear before
labels.

From-SVN: r255611

gcc/ChangeLog
gcc/tree-cfg.c

index 943c8793bc29c3acb988ee50444e5e3d12e50ee3..420d84b38e066b05679fbf31842a0966c210af1f 100644 (file)
@@ -1,5 +1,9 @@
 2017-12-13  Jakub Jelinek  <jakub@redhat.com>
 
+       * tree-cfg.c (verify_gimple_in_cfg): Verify no non-label stmts
+       with the exception of debug begin stmt markers appear before
+       labels.
+
        PR bootstrap/83396
        * final.c (rest_of_handle_final): Call variable_tracking_main only
        if !flag_var_tracking.
index 9a4e3e206a1515ecc7af70900e83160d3666837a..75a0a302e96f30c7231e460c2bdbb37c2f4704ff 100644 (file)
@@ -5380,6 +5380,7 @@ verify_gimple_in_cfg (struct function *fn, bool verify_nothrow)
          err |= err2;
        }
 
+      bool label_allowed = true;
       for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
        {
          gimple *stmt = gsi_stmt (gsi);
@@ -5396,6 +5397,19 @@ verify_gimple_in_cfg (struct function *fn, bool verify_nothrow)
              err2 = true;
            }
 
+         /* Labels may be preceded only by debug markers, not debug bind
+            or source bind or any other statements.  */
+         if (gimple_code (stmt) == GIMPLE_LABEL)
+           {
+             if (!label_allowed)
+               {
+                 error ("gimple label in the middle of a basic block");
+                 err2 = true;
+               }
+           }
+         else if (!gimple_debug_begin_stmt_p (stmt))
+           label_allowed = false;
+
          err2 |= verify_gimple_stmt (stmt);
          err2 |= verify_location (&blocks, gimple_location (stmt));