diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Sema/SemaOpenMP.cpp | 2 | ||||
-rw-r--r-- | clang/test/OpenMP/declare_target_messages.cpp | 6 |
2 files changed, 4 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index 6220e86b544..896954fcf09 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -12962,7 +12962,7 @@ static void checkDeclInTargetContext(SourceLocation SL, SourceRange SR, if (!LD) LD = D; if (LD && !LD->hasAttr<OMPDeclareTargetDeclAttr>() && - (isa<VarDecl>(LD) || isa<FunctionDecl>(LD))) { + ((isa<VarDecl>(LD) && !isa<ParmVarDecl>(LD)) || isa<FunctionDecl>(LD))) { // Outlined declaration is not declared target. if (LD->isOutOfLine()) { SemaRef.Diag(LD->getLocation(), diag::warn_omp_not_in_target_context); diff --git a/clang/test/OpenMP/declare_target_messages.cpp b/clang/test/OpenMP/declare_target_messages.cpp index 3286a29dc41..72ea33cfc82 100644 --- a/clang/test/OpenMP/declare_target_messages.cpp +++ b/clang/test/OpenMP/declare_target_messages.cpp @@ -88,7 +88,7 @@ int C::method1() { return 0; } -void foo() { +void foo(int p) { a = 0; // expected-error {{threadprivate variables cannot be used in target constructs}} b = 0; // expected-note {{used here}} t = 1; // expected-error {{threadprivate variables cannot be used in target constructs}} @@ -96,7 +96,7 @@ void foo() { VC object1; g = object.method(); g += object.method1(); - g += object1.method(); + g += object1.method() + p; f(); c(); // expected-note {{used here}} } @@ -119,7 +119,7 @@ int main (int argc, char **argv) { #pragma omp declare target // expected-error {{unexpected OpenMP directive '#pragma omp declare target'}} int v; #pragma omp end declare target // expected-error {{unexpected OpenMP directive '#pragma omp end declare target'}} - foo(); + foo(v); return (0); } |