diff mbox

Check no unreachable blocks in inverted_post_order_compute

Message ID 561BB14D.9080309@mentor.com
State New
Headers show

Commit Message

Tom de Vries Oct. 12, 2015, 1:10 p.m. UTC
Hi,

in the header comment of function inverted_post_order_compute in 
cfganal.c we find:
...
    This function assumes that all blocks in the CFG are reachable
    from the ENTRY (but not necessarily from EXIT).
...

This patch checks that there are indeed no unreachable blocks when 
calling inverted_post_order_compute.

OK for trunk if bootstrap/regtest succeeds?

Thanks,
- Tom

Comments

Jeff Law Oct. 12, 2015, 8:34 p.m. UTC | #1
On 10/12/2015 07:10 AM, Tom de Vries wrote:
> Hi,
>
> in the header comment of function inverted_post_order_compute in
> cfganal.c we find:
> ...
>     This function assumes that all blocks in the CFG are reachable
>     from the ENTRY (but not necessarily from EXIT).
> ...
>
> This patch checks that there are indeed no unreachable blocks when
> calling inverted_post_order_compute.
>
> OK for trunk if bootstrap/regtest succeeds?
Yes.  I won't queue it behind Mikhail's changes.  Consider yourself 
lucky :-)

jeff
diff mbox

Patch

Check no unreachable blocks in inverted_post_order_compute

2015-10-12  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.
---
 gcc/cfganal.c | 17 +++++++++++++++++
 gcc/cfganal.h |  1 +
 2 files changed, 18 insertions(+)

diff --git a/gcc/cfganal.c b/gcc/cfganal.c
index 279c3b5..1f935eb 100644
--- a/gcc/cfganal.c
+++ b/gcc/cfganal.c
@@ -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);
+}
+
 
 /* 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;
diff --git a/gcc/cfganal.h b/gcc/cfganal.h
index 3eb4764..2ad00c0 100644
--- a/gcc/cfganal.h
+++ b/gcc/cfganal.h
@@ -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 *);
-- 
1.9.1