summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/cfganal.c17
-rw-r--r--gcc/cfganal.h1
3 files changed, 25 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dc9b1f3867b..9ef5de99856 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/cfganal.c b/gcc/cfganal.c
index 279c3b54995..1f935ebc6ff 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 3eb47648099..2ad00c0e705 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 *);