summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/AST/Stmt.cpp2
-rw-r--r--clang/test/OpenMP/report_default_DSA.cpp18
2 files changed, 19 insertions, 1 deletions
diff --git a/clang/lib/AST/Stmt.cpp b/clang/lib/AST/Stmt.cpp
index 69e65f558f8..2367cadf645 100644
--- a/clang/lib/AST/Stmt.cpp
+++ b/clang/lib/AST/Stmt.cpp
@@ -1112,7 +1112,7 @@ void CapturedStmt::setCapturedRegionKind(CapturedRegionKind Kind) {
bool CapturedStmt::capturesVariable(const VarDecl *Var) const {
for (const auto &I : captures()) {
- if (!I.capturesVariable())
+ if (!I.capturesVariable() && !I.capturesVariableByCopy())
continue;
// This does not handle variable redeclarations. This should be
diff --git a/clang/test/OpenMP/report_default_DSA.cpp b/clang/test/OpenMP/report_default_DSA.cpp
new file mode 100644
index 00000000000..d14cd5cbe9a
--- /dev/null
+++ b/clang/test/OpenMP/report_default_DSA.cpp
@@ -0,0 +1,18 @@
+// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 %s
+
+void foo(int x, int n) {
+ double vec[n];
+ for (int iter = 0; iter < x; iter++) {
+#pragma omp target teams distribute parallel for map( \
+ from \
+ : vec [0:n]) default(none)
+ // expected-error@+1 {{variable 'n' must have explicitly specified data sharing attributes}}
+ for (int ii = 0; ii < n; ii++) {
+ // expected-error@+3 {{variable 'iter' must have explicitly specified data sharing attributes}}
+ // expected-error@+2 {{variable 'vec' must have explicitly specified data sharing attributes}}
+ // expected-error@+1 {{variable 'x' must have explicitly specified data sharing attributes}}
+ vec[ii] = iter + ii + x;
+ }
+ }
+}
+
OpenPOWER on IntegriCloud