aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2009-12-01 20:41:52 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2009-12-01 20:41:52 +0100
commit4f2eb765d71a0bdf740ec57900916bf9cf9dcf9a (patch)
treec8713cd4d2b5447f05d6ea1a049d429790689e19
parent090fa0ab610a8735d967f854f2e0e4517a3d3602 (diff)
downloadgcc-4f2eb765d71a0bdf740ec57900916bf9cf9dcf9a.zip
gcc-4f2eb765d71a0bdf740ec57900916bf9cf9dcf9a.tar.gz
gcc-4f2eb765d71a0bdf740ec57900916bf9cf9dcf9a.tar.bz2
re PR debug/42234 (internal compiler error: verify_ssa failed)
PR c++/42234 * tree-cfgcleanup.c (cleanup_omp_return): Don't ICE if control_bb contains no statements. * g++.dg/gomp/pr42234.C: New test. From-SVN: r154878
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/gomp/pr42234.C19
-rw-r--r--gcc/tree-cfgcleanup.c4
4 files changed, 32 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1b82233..ef355dd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2009-12-01 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/42234
+ * tree-cfgcleanup.c (cleanup_omp_return): Don't ICE if control_bb
+ contains no statements.
+
2009-12-01 Grigori Fursin <grigori.fursin@inria.fr>
Joern Rennecke <amylaar@spamcop.net>
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c691529..3d0561a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-12-01 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/42234
+ * g++.dg/gomp/pr42234.C: New test.
+
2009-12-01 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/42237
diff --git a/gcc/testsuite/g++.dg/gomp/pr42234.C b/gcc/testsuite/g++.dg/gomp/pr42234.C
new file mode 100644
index 0000000..9245b6c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/gomp/pr42234.C
@@ -0,0 +1,19 @@
+// PR c++/42234
+// { dg-do compile }
+// { dg-options "-fopenmp" }
+
+extern int foo (void);
+
+void
+bar (int x)
+{
+ #pragma omp critical
+ {
+ int j;
+ for (j = 0; j < foo (); j++)
+ ;
+ if (0)
+ if (x >= 4)
+ ;
+ }
+}
diff --git a/gcc/tree-cfgcleanup.c b/gcc/tree-cfgcleanup.c
index 495450b..9fb489a 100644
--- a/gcc/tree-cfgcleanup.c
+++ b/gcc/tree-cfgcleanup.c
@@ -1,5 +1,5 @@
/* CFG cleanup for trees.
- Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
Free Software Foundation, Inc.
This file is part of GCC.
@@ -511,7 +511,7 @@ cleanup_omp_return (basic_block bb)
control_bb = single_pred (bb);
stmt = last_stmt (control_bb);
- if (gimple_code (stmt) != GIMPLE_OMP_SECTIONS_SWITCH)
+ if (stmt == NULL || gimple_code (stmt) != GIMPLE_OMP_SECTIONS_SWITCH)
return false;
/* The block with the control statement normally has two entry edges -- one