aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2014-02-12 15:46:08 +0100
committerThomas Schwinge <tschwinge@gcc.gnu.org>2014-02-12 15:46:08 +0100
commit64e5ace535448901c3e29cc1f6612e6c8d2a0a0c (patch)
tree89f989ac44affc877db59bdd2965712c0ec6572a /gcc
parent7b40f5cf04d6edc82777c4eca0c5b62bae76ee7e (diff)
downloadgcc-64e5ace535448901c3e29cc1f6612e6c8d2a0a0c.zip
gcc-64e5ace535448901c3e29cc1f6612e6c8d2a0a0c.tar.gz
gcc-64e5ace535448901c3e29cc1f6612e6c8d2a0a0c.tar.bz2
Fix potential ICE (null pointer dereference) in omp-low.c:diagnose_sb_0.
gcc/ * omp-low.c (diagnose_sb_0): Make sure label_ctx is valid to dereference. gcc/testsuite/ * gcc.dg/cilk-plus/jump-openmp.c: New file. From-SVN: r207722
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/omp-low.c3
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/cilk-plus/jump-openmp.c49
4 files changed, 60 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fc720dc..78bf506 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2014-02-12 Thomas Schwinge <thomas@codesourcery.com>
+
+ * omp-low.c (diagnose_sb_0): Make sure label_ctx is valid to
+ dereference.
+
2014-02-12 James Greenhalgh <james.greenhalgh@arm.com>
* config/arm/aarch-cost-tables.h (generic_extra_costs): Fix
diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index f99b2a6..ff3d2e8 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -10269,7 +10269,8 @@ diagnose_sb_0 (gimple_stmt_iterator *gsi_p,
if ((branch_ctx
&& gimple_code (branch_ctx) == GIMPLE_OMP_FOR
&& gimple_omp_for_kind (branch_ctx) == GF_OMP_FOR_KIND_CILKSIMD)
- || (gimple_code (label_ctx) == GIMPLE_OMP_FOR
+ || (label_ctx
+ && gimple_code (label_ctx) == GIMPLE_OMP_FOR
&& gimple_omp_for_kind (label_ctx) == GF_OMP_FOR_KIND_CILKSIMD))
cilkplus_block = true;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c87966d..46d5ff8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2014-02-12 Thomas Schwinge <thomas@codesourcery.com>
+
+ * gcc.dg/cilk-plus/jump-openmp.c: New file.
+
2014-02-12 Richard Biener <rguenther@suse.de>
PR middle-end/60092
diff --git a/gcc/testsuite/gcc.dg/cilk-plus/jump-openmp.c b/gcc/testsuite/gcc.dg/cilk-plus/jump-openmp.c
new file mode 100644
index 0000000..95e6b2d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cilk-plus/jump-openmp.c
@@ -0,0 +1,49 @@
+/* { dg-do compile } */
+/* { dg-options "-fcilkplus -fopenmp" } */
+/* { dg-require-effective-target fopenmp } */
+
+int *a, *b, c;
+
+void foo()
+{
+#pragma simd
+ for (int i=0; i < 1000; ++i)
+ {
+ a[i] = b[i];
+ if (c == 5)
+ return; /* { dg-error "invalid branch to/from a Cilk Plus structured block" } */
+ }
+}
+
+void bar()
+{
+#pragma simd
+ for (int i=0; i < 1000; ++i)
+ {
+ lab:
+ a[i] = b[i];
+ }
+ if (c == 6)
+ goto lab; /* { dg-error "invalid entry to Cilk Plus structured block" } */
+}
+
+void baz()
+{
+ bad1:
+ #pragma omp parallel
+ goto bad1; /* { dg-error "invalid branch to/from an OpenMP structured block" } */
+
+ goto bad2; /* { dg-error "invalid entry to OpenMP structured block" } */
+ #pragma omp parallel
+ {
+ bad2: ;
+ }
+
+ #pragma omp parallel
+ {
+ int i;
+ goto ok1;
+ for (i = 0; i < 10; ++i)
+ { ok1: break; }
+ }
+}