diff options
author | Kelvin Li <kkwli0@gmail.com> | 2018-09-10 02:07:09 +0000 |
---|---|---|
committer | Kelvin Li <kkwli0@gmail.com> | 2018-09-10 02:07:09 +0000 |
commit | bc38e63718b62393737da8660b33aaaae7067479 (patch) | |
tree | 25ec87ff327e29d645fc8c4b81c0f4fe5e56a941 /clang/lib | |
parent | 3823516103e818734e82ba44cef455e344d356e1 (diff) | |
download | bcm5719-llvm-bc38e63718b62393737da8660b33aaaae7067479.tar.gz bcm5719-llvm-bc38e63718b62393737da8660b33aaaae7067479.zip |
[OpenMP] Add support for nested 'declare target' directives
Add the capability to nest multiple declare target directives
- including header files within a declare target region.
Differential Revision: https://reviews.llvm.org/D51378
Patch by Patrick Lyster
llvm-svn: 341766
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Parse/ParseOpenMP.cpp | 4 | ||||
-rw-r--r-- | clang/lib/Sema/SemaOpenMP.cpp | 11 |
2 files changed, 5 insertions, 10 deletions
diff --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp index b3c7e3a63d0..4da357bbbc7 100644 --- a/clang/lib/Parse/ParseOpenMP.cpp +++ b/clang/lib/Parse/ParseOpenMP.cpp @@ -775,8 +775,8 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl( llvm::SmallVector<Decl *, 4> Decls; DKind = parseOpenMPDirectiveKind(*this); - while (DKind != OMPD_end_declare_target && DKind != OMPD_declare_target && - Tok.isNot(tok::eof) && Tok.isNot(tok::r_brace)) { + while (DKind != OMPD_end_declare_target && Tok.isNot(tok::eof) && + Tok.isNot(tok::r_brace)) { DeclGroupPtrTy Ptr; // Here we expect to see some function declaration. if (AS == AS_none) { diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index 215b4bf1090..3664f9a5fd4 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -12960,19 +12960,14 @@ bool Sema::ActOnStartOpenMPDeclareTargetDirective(SourceLocation Loc) { Diag(Loc, diag::err_omp_region_not_file_context); return false; } - if (IsInOpenMPDeclareTargetContext) { - Diag(Loc, diag::err_omp_enclosed_declare_target); - return false; - } - - IsInOpenMPDeclareTargetContext = true; + ++DeclareTargetNestingLevel; return true; } void Sema::ActOnFinishOpenMPDeclareTargetDirective() { - assert(IsInOpenMPDeclareTargetContext && + assert(DeclareTargetNestingLevel > 0 && "Unexpected ActOnFinishOpenMPDeclareTargetDirective"); - IsInOpenMPDeclareTargetContext = false; + --DeclareTargetNestingLevel; } void Sema::ActOnOpenMPDeclareTargetName(Scope *CurScope, |