diff options
| -rw-r--r-- | clang/lib/AST/Stmt.cpp | 2 | ||||
| -rw-r--r-- | clang/test/OpenMP/report_default_DSA.cpp | 18 | 
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; +    } +  } +} +  | 

