Check no unreachable blocks in inverted_post_order_compute
authorTom de Vries <tom@codesourcery.com>
Tue, 13 Oct 2015 22:10:45 +0000 (22:10 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Tue, 13 Oct 2015 22:10:45 +0000 (22:10 +0000)
2015-10-14  Tom de Vries  <tom@codesourcery.com>

* cfganal.c (verify_no_unreachable_blocks): New function.
(inverted_post_order_compute) [ENABLE_CHECKING]: Call
verify_no_unreachable_blocks.
cfganal.h (verify_no_unreachable_blocks): Declare.

From-SVN: r228789

gcc/ChangeLog
gcc/cfganal.c
gcc/cfganal.h

index dc9b1f3867b758d56a181335cc6925cf6748e921..9ef5de998562e6614f3eecb07761793fc65734c4 100644 (file)
@@ -1,3 +1,10 @@
+2015-10-14  Tom de Vries  <tom@codesourcery.com>
+
+       * cfganal.c (verify_no_unreachable_blocks): New function.
+       (inverted_post_order_compute) [ENABLE_CHECKING]: Call
+       verify_no_unreachable_blocks.
+       cfganal.h (verify_no_unreachable_blocks): Declare.
+
 2015-10-13  Mikhail Maltsev  <maltsevm@gmail.com>
 
        * common.opt: Add flag_checking.
index 279c3b549958dc3d57a7337de61967f9c70ffa5d..1f935ebc6ffdfe1ba93667e94f5ce306f9153a07 100644 (file)
@@ -193,6 +193,19 @@ find_unreachable_blocks (void)
 
   free (worklist);
 }
+
+/* Verify that there are no unreachable blocks in the current function.  */
+
+void
+verify_no_unreachable_blocks (void)
+{
+  find_unreachable_blocks ();
+
+  basic_block bb;
+  FOR_EACH_BB_FN (bb, cfun)
+    gcc_assert ((bb->flags & BB_REACHABLE) != 0);
+}
+
 \f
 /* Functions to access an edge list with a vector representation.
    Enough data is kept such that given an index number, the
@@ -772,6 +785,10 @@ inverted_post_order_compute (int *post_order)
   int post_order_num = 0;
   sbitmap visited;
 
+#if ENABLE_CHECKING
+  verify_no_unreachable_blocks ();
+#endif
+
   /* Allocate stack for back-tracking up CFG.  */
   stack = XNEWVEC (edge_iterator, n_basic_blocks_for_fn (cfun) + 1);
   sp = 0;
index 3eb47648099db483d42fe9c0c939f1df3adecfc4..2ad00c0e705ace8895cfcfd2449984c01ab34a75 100644 (file)
@@ -49,6 +49,7 @@ private:
 
 extern bool mark_dfs_back_edges (void);
 extern void find_unreachable_blocks (void);
+extern void verify_no_unreachable_blocks (void);
 struct edge_list * create_edge_list (void);
 void free_edge_list (struct edge_list *);
 void print_edge_list (FILE *, struct edge_list *);