aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2017-07-05 10:20:42 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2017-07-31 22:21:59 +0200
commite2635465a2297b60e2d929adcefc3222ab041bd0 (patch)
tree8e95d4268afde220230f71396acd34ac60e377b7
parent8daa5eacec82264bd34232aefe12b5ff885d0b8a (diff)
downloadsparse-dev-e2635465a2297b60e2d929adcefc3222ab041bd0.tar.gz
fix crash in rewrite_branch()
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--flow.c2
-rw-r--r--validation/crash-rewrite-branch.c24
2 files changed, 25 insertions, 1 deletions
diff --git a/flow.c b/flow.c
index 23fa7c21..6cac21b2 100644
--- a/flow.c
+++ b/flow.c
@@ -30,7 +30,7 @@ static int rewrite_branch(struct basic_block *bb,
struct basic_block *old,
struct basic_block *new)
{
- if (*ptr != old || new == old)
+ if (*ptr != old || new == old || !bb->ep)
return 0;
/* We might find new if-conversions or non-dominating CSEs */
diff --git a/validation/crash-rewrite-branch.c b/validation/crash-rewrite-branch.c
new file mode 100644
index 00000000..eb310df1
--- /dev/null
+++ b/validation/crash-rewrite-branch.c
@@ -0,0 +1,24 @@
+void a(int c, int e)
+{
+ for(; b; c ;
+
+ if (()) {
+ unsigned short d = e;
+ if (())
+ while ()
+ ;
+ &d;
+ }
+
+ if (()) {
+ int f = &f;
+ }
+}
+
+/*
+ * check-name: crash rewrite_branch
+ * check-command: test-linearize $file
+ *
+ * check-error-ignore
+ * check-output-ignore
+ */