+2018-11-09 Jakub Jelinek <jakub@redhat.com>
+
+ * gimplify.c (gimplify_scan_omp_clauses): Call sorry_at for valid
+ but unsupported lastprivate with conditional modifier.
+
2018-11-09 Jeff Law <law@redhat.com>
* config/mips/mips.c (mips_loongson_ext2_prefetch_cookie): Handle
"%<lastprivate%> clause", decl);
OMP_CLAUSE_LASTPRIVATE_CONDITIONAL (c) = 0;
}
+ if (OMP_CLAUSE_LASTPRIVATE_CONDITIONAL (c))
+ sorry_at (OMP_CLAUSE_LOCATION (c),
+ "%<conditional%> modifier on %<lastprivate%> clause "
+ "not supported yet");
if (outer_ctx
&& (outer_ctx->region_type == ORT_COMBINED_PARALLEL
|| ((outer_ctx->region_type & ORT_COMBINED_TEAMS)
+2018-11-09 Jakub Jelinek <jakub@redhat.com>
+
+ * c-c++-common/gomp/lastprivate-conditional-1.c: New test.
+ * c-c++-common/gomp/lastprivate-conditional-2.c: New test.
+
2018-11-09 Jeff Law <law@redhat.com>
gcc.dg/torture/stackalign/builtin-apply-2.c: Skip on v850.
--- /dev/null
+void
+foo (int *p)
+{
+ int a = -1, b = -1, c = -1, d = -1, e = -1, f = -1, g = -1, h = -1;
+ int i;
+ #pragma omp teams
+ {
+ #pragma omp distribute lastprivate (conditional: a) /* { dg-error "conditional 'lastprivate' clause on 'distribute' construct" } */
+ for (i = 0; i < 32; i++)
+ if (p[i])
+ a = i;
+ #pragma omp distribute simd lastprivate (conditional: b) /* { dg-error "conditional 'lastprivate' clause on 'distribute' construct" } */
+ for (i = 0; i < 32; i++)
+ if (p[i])
+ b = i;
+ #pragma omp distribute parallel for lastprivate (conditional: c) /* { dg-error "conditional 'lastprivate' clause on 'distribute' construct" } */
+ for (i = 0; i < 32; i++)
+ if (p[i])
+ c = i;
+ #pragma omp distribute parallel for simd lastprivate (conditional: d) /* { dg-error "conditional 'lastprivate' clause on 'distribute' construct" } */
+ for (i = 0; i < 32; i++)
+ if (p[i])
+ d = i;
+ }
+ #pragma omp teams distribute parallel for lastprivate (conditional: e) /* { dg-error "conditional 'lastprivate' clause on 'distribute' construct" } */
+ for (i = 0; i < 32; i++)
+ if (p[i])
+ e = i;
+ #pragma omp parallel
+ {
+ #pragma omp master
+ #pragma omp taskloop lastprivate (conditional: f) /* { dg-error "conditional 'lastprivate' clause on 'taskloop' construct" } */
+ for (i = 0; i < 32; i++)
+ if (p[i])
+ f = i;
+ #pragma omp master taskloop simd lastprivate (conditional: g) /* { dg-error "conditional 'lastprivate' clause on 'taskloop' construct" } */
+ for (i = 0; i < 32; i++)
+ if (p[i])
+ g = i;
+ }
+ #pragma omp parallel master taskloop simd lastprivate (conditional: h) /* { dg-error "conditional 'lastprivate' clause on 'taskloop' construct" } */
+ for (i = 0; i < 32; i++)
+ if (p[i])
+ h = i;
+}
+
+struct S { int a, b; };
+
+void
+bar (int *p)
+{
+ struct S s = { -1, -1 }, t = { 1, 2 };
+ int i;
+ #pragma omp parallel for lastprivate (conditional: s) /* { dg-error "non-scalar variable 's' in conditional 'lastprivate' clause" } */
+ for (i = 0; i < 32; i++)
+ if (p[i])
+ {
+ struct S u = t;
+ u.b = i;
+ s = u;
+ }
+}
+
+/* { dg-prune-output "not supported yet" } */
--- /dev/null
+void
+foo (int *p)
+{
+ int a = -1, b = -1, c = -1, d = -1, e = -1, f = -1, g = -1, h = -1;
+ int i;
+ #pragma omp parallel
+ #pragma omp for lastprivate (conditional: a) /* { dg-message "not supported yet" } */
+ for (i = 0; i < 32; i++)
+ if (p[i])
+ a = i;
+ #pragma omp simd lastprivate (conditional: b) /* { dg-message "not supported yet" } */
+ for (i = 0; i < 32; i++)
+ if (p[i])
+ b = i;
+ #pragma omp parallel
+ #pragma omp for simd lastprivate (conditional: c) /* { dg-message "not supported yet" } */
+ for (i = 0; i < 32; i++)
+ if (p[i])
+ c = i;
+ #pragma omp parallel for lastprivate (conditional: d) /* { dg-message "not supported yet" } */
+ for (i = 0; i < 32; i++)
+ if (p[i])
+ d = i;
+ #pragma omp parallel for simd lastprivate (conditional: e) /* { dg-message "not supported yet" } */
+ for (i = 0; i < 32; i++)
+ if (p[i])
+ e = i;
+}