From: Tom de Vries <Tom_deVries@mentor.com>
To: "gcc-patches@gnu.org" <gcc-patches@gnu.org>
Subject: [PATCH] Check no unreachable blocks in inverted_post_order_compute
Date: Mon, 12 Oct 2015 13:11:00 -0000 [thread overview]
Message-ID: <561BB14D.9080309@mentor.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 383 bytes --]
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
[-- Attachment #2: 0001-Check-no-unreachable-blocks-in-inverted_post_order_c.patch --]
[-- Type: text/x-patch, Size: 1736 bytes --]
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);
+}
+
\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;
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
next reply other threads:[~2015-10-12 13:11 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-12 13:11 Tom de Vries [this message]
2015-10-12 20:34 ` Jeff Law
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=561BB14D.9080309@mentor.com \
--to=tom_devries@mentor.com \
--cc=gcc-patches@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).