@@ -8065,6 +8065,10 @@ gimplify_scan_omp_clauses (tree *list_p,
"%<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)
@@ -0,0 +1,64 @@
+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" } */
@@ -0,0 +1,28 @@
+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;
+}