diff options
author | Sandeep Kosuri <66305775+sandeepkosuri@users.noreply.github.com> | 2024-03-06 19:46:23 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-06 19:46:23 +0530 |
commit | 6d3bb854713e43daad34ffc84d0132d7fe010abf (patch) | |
tree | 8c8a5044ff9013e8ee00bb3b46a84fdd5df00b4f /clang/lib/Parse/ParseOpenMP.cpp | |
parent | 1fc5e50cebf1e423bce105930c3a075044998f68 (diff) | |
download | llvm-6d3bb854713e43daad34ffc84d0132d7fe010abf.zip llvm-6d3bb854713e43daad34ffc84d0132d7fe010abf.tar.gz llvm-6d3bb854713e43daad34ffc84d0132d7fe010abf.tar.bz2 |
[OpenMP] Parse and Sema support for declare target in local scope (#83223)
- adds Parse and Sema support for the `declare target` directive inside
a function scope.
Diffstat (limited to 'clang/lib/Parse/ParseOpenMP.cpp')
-rw-r--r-- | clang/lib/Parse/ParseOpenMP.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp index bfc31f2..814126e 100644 --- a/clang/lib/Parse/ParseOpenMP.cpp +++ b/clang/lib/Parse/ParseOpenMP.cpp @@ -2984,8 +2984,29 @@ StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective( OMPDirectiveScope.Exit(); break; } + case OMPD_declare_target: { + SourceLocation DTLoc = ConsumeAnyToken(); + bool HasClauses = Tok.isNot(tok::annot_pragma_openmp_end); + Sema::DeclareTargetContextInfo DTCI(DKind, DTLoc); + if (HasClauses) + ParseOMPDeclareTargetClauses(DTCI); + bool HasImplicitMappings = + !HasClauses || (DTCI.ExplicitlyMapped.empty() && DTCI.Indirect); + + if (HasImplicitMappings) { + Diag(Tok, diag::err_omp_unexpected_directive) + << 1 << getOpenMPDirectiveName(DKind); + SkipUntil(tok::annot_pragma_openmp_end); + break; + } + + // Skip the last annot_pragma_openmp_end. + ConsumeAnyToken(); + + Actions.ActOnFinishedOpenMPDeclareTargetContext(DTCI); + break; + } case OMPD_declare_simd: - case OMPD_declare_target: case OMPD_begin_declare_target: case OMPD_end_declare_target: case OMPD_requires: |