forked from OSchip/llvm-project
[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:
parent
b5c2a2d959
commit
2c84541a21
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue