[OPENMP] Check DSA for variables captured by value.

Currently clang checks for default data sharing attributes only for
variables captured in OpenMP regions by reference. Patch adds checks for
variables captured by value.

llvm-svn: 303077
This commit is contained in:
Alexey Bataev 2017-05-15 16:26:15 +00:00
parent b5c2a2d959
commit 2c84541a21
2 changed files with 19 additions and 1 deletions

View File

@ -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

View File

@ -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;
}
}
}