aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Parse/ParseOpenMP.cpp
diff options
context:
space:
mode:
authorSandeep Kosuri <66305775+sandeepkosuri@users.noreply.github.com>2024-03-06 19:46:23 +0530
committerGitHub <noreply@github.com>2024-03-06 19:46:23 +0530
commit6d3bb854713e43daad34ffc84d0132d7fe010abf (patch)
tree8c8a5044ff9013e8ee00bb3b46a84fdd5df00b4f /clang/lib/Parse/ParseOpenMP.cpp
parent1fc5e50cebf1e423bce105930c3a075044998f68 (diff)
downloadllvm-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.cpp23
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: