[clang] ca27f3e - [Clang][OpenMP] Support for omp nothing
via cfe-commits
cfe-commits at lists.llvm.org
Tue May 24 22:00:10 PDT 2022
Author: Sunil Kuravinakop
Date: 2022-05-24T23:59:31-05:00
New Revision: ca27f3e3b26ed5389d4a361f274e3be516eb282d
URL: https://github.com/llvm/llvm-project/commit/ca27f3e3b26ed5389d4a361f274e3be516eb282d
DIFF: https://github.com/llvm/llvm-project/commit/ca27f3e3b26ed5389d4a361f274e3be516eb282d.diff
LOG: [Clang][OpenMP] Support for omp nothing
Patch to support "#pragma omp nothing"
Reviewed By: tianshilei1992
Differential Revision: https://reviews.llvm.org/D123286
Added:
clang/test/OpenMP/nothing_messages.cpp
Modified:
clang/lib/Basic/OpenMPKinds.cpp
clang/lib/Parse/ParseOpenMP.cpp
llvm/include/llvm/Frontend/OpenMP/OMP.td
Removed:
################################################################################
diff --git a/clang/lib/Basic/OpenMPKinds.cpp b/clang/lib/Basic/OpenMPKinds.cpp
index 5ff4e023fb3c1..dbfe2117b00a6 100644
--- a/clang/lib/Basic/OpenMPKinds.cpp
+++ b/clang/lib/Basic/OpenMPKinds.cpp
@@ -730,6 +730,9 @@ void clang::getOpenMPCaptureRegions(
case OMPD_teams_loop:
CaptureRegions.push_back(OMPD_teams);
break;
+ case OMPD_nothing:
+ CaptureRegions.push_back(OMPD_nothing);
+ break;
case OMPD_loop:
// TODO: 'loop' may require
diff erent capture regions depending on the bind
// clause or the parent directive when there is no bind clause. Use
diff --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp
index 3d5c9c949760b..1e484f5644170 100644
--- a/clang/lib/Parse/ParseOpenMP.cpp
+++ b/clang/lib/Parse/ParseOpenMP.cpp
@@ -2488,6 +2488,16 @@ StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective(
bool HasAssociatedStatement = true;
switch (DKind) {
+ case OMPD_nothing:
+ if ((StmtCtx & ParsedStmtContext::AllowStandaloneOpenMPDirectives) ==
+ ParsedStmtContext())
+ Diag(Tok, diag::err_omp_immediate_directive)
+ << getOpenMPDirectiveName(DKind) << 0;
+ ConsumeToken();
+ skipUntilPragmaOpenMPEnd(DKind);
+ if (Tok.is(tok::annot_pragma_openmp_end))
+ ConsumeAnnotationToken();
+ break;
case OMPD_metadirective: {
ConsumeToken();
SmallVector<VariantMatchInfo, 4> VMIs;
diff --git a/clang/test/OpenMP/nothing_messages.cpp b/clang/test/OpenMP/nothing_messages.cpp
new file mode 100644
index 0000000000000..cd6d0defe492f
--- /dev/null
+++ b/clang/test/OpenMP/nothing_messages.cpp
@@ -0,0 +1,27 @@
+// RUN: %clang_cc1 -verify=expected -fopenmp -ferror-limit 100 %s -Wuninitialized
+
+int mixed() {
+ int x = 0;
+ int d = 4;
+
+#pragma omp nothing
+ x=d;
+
+ if(!x) {
+#pragma omp nothing
+ x=d;
+ }
+
+// expected-error at +2 {{#pragma omp nothing' cannot be an immediate substatement}}
+ if(!x)
+#pragma omp nothing
+ x=d;
+
+// expected-warning at +2 {{extra tokens at the end of '#pragma omp nothing' are ignored}}
+ if(!x) {
+#pragma omp nothing seq_cst
+ x=d;
+ }
+
+ return 0;
+}
diff --git a/llvm/include/llvm/Frontend/OpenMP/OMP.td b/llvm/include/llvm/Frontend/OpenMP/OMP.td
index 8218be1f966bf..b4abc64bc2118 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMP.td
+++ b/llvm/include/llvm/Frontend/OpenMP/OMP.td
@@ -629,6 +629,7 @@ def OMP_Requires : Directive<"requires"> {
VersionedClause<OMPC_AtomicDefaultMemOrder>
];
}
+def OMP_Nothing : Directive<"nothing"> {}
def OMP_TargetData : Directive<"target data"> {
let allowedClauses = [
VersionedClause<OMPC_UseDevicePtr>,
More information about the cfe-commits
mailing list