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@+2 {{#pragma omp nothing' cannot be an immediate substatement}} + if(!x) +#pragma omp nothing + x=d; + +// expected-warning@+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>, _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits