From a352b7102707500d1977c714d41d799b27de0a49 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Tue, 13 Oct 2015 22:10:45 +0000 Subject: [PATCH] Check no unreachable blocks in inverted_post_order_compute 2015-10-14 Tom de Vries * 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 | 7 +++++++ gcc/cfganal.c | 17 +++++++++++++++++ gcc/cfganal.h | 1 + 3 files changed, 25 insertions(+) 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 + + * 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 * 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 *); -- 2.30.2