diff options
author | Krzysztof Parzyszek <Krzysztof.Parzyszek@amd.com> | 2025-05-09 07:41:54 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-09 07:41:54 -0500 |
commit | 6094080d27bc6dae4d85de207d4cf5586becf1aa (patch) | |
tree | a02d746cb4546064f68d7fbcf727a809a6b3682b /clang/lib/Parse/ParseOpenMP.cpp | |
parent | 4b29ee407e6466364d70f7962104561553ea89cc (diff) | |
download | llvm-6094080d27bc6dae4d85de207d4cf5586becf1aa.zip llvm-6094080d27bc6dae4d85de207d4cf5586becf1aa.tar.gz llvm-6094080d27bc6dae4d85de207d4cf5586becf1aa.tar.bz2 |
[clang][OpenMP] Pass OpenMP version to getOpenMPDirectiveName (#139115)
The OpenMP version is stored in language options in ASTContext. If the
context is not available, use the fallback version.
RFC:
https://discourse.llvm.org/t/rfc-alternative-spellings-of-openmp-directives/85507
Diffstat (limited to 'clang/lib/Parse/ParseOpenMP.cpp')
-rw-r--r-- | clang/lib/Parse/ParseOpenMP.cpp | 128 |
1 files changed, 83 insertions, 45 deletions
diff --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp index 8d8698e..4f87d6c 100644 --- a/clang/lib/Parse/ParseOpenMP.cpp +++ b/clang/lib/Parse/ParseOpenMP.cpp @@ -288,11 +288,12 @@ static DeclarationName parseOpenMPReductionId(Parser &P) { /// Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclareReductionDirective(AccessSpecifier AS) { + unsigned OMPVersion = Actions.getLangOpts().OpenMP; // Parse '('. BalancedDelimiterTracker T(*this, tok::l_paren, tok::annot_pragma_openmp_end); if (T.expectAndConsume( diag::err_expected_lparen_after, - getOpenMPDirectiveName(OMPD_declare_reduction).data())) { + getOpenMPDirectiveName(OMPD_declare_reduction, OMPVersion).data())) { SkipUntil(tok::annot_pragma_openmp_end, StopBeforeMatch); return DeclGroupPtrTy(); } @@ -540,10 +541,12 @@ void Parser::ParseOpenMPReductionInitializerForDecl(VarDecl *OmpPrivParm) { Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclareMapperDirective(AccessSpecifier AS) { bool IsCorrect = true; + unsigned OMPVersion = Actions.getLangOpts().OpenMP; // Parse '(' BalancedDelimiterTracker T(*this, tok::l_paren, tok::annot_pragma_openmp_end); - if (T.expectAndConsume(diag::err_expected_lparen_after, - getOpenMPDirectiveName(OMPD_declare_mapper).data())) { + if (T.expectAndConsume( + diag::err_expected_lparen_after, + getOpenMPDirectiveName(OMPD_declare_mapper, OMPVersion).data())) { SkipUntil(tok::annot_pragma_openmp_end, StopBeforeMatch); return DeclGroupPtrTy(); } @@ -626,7 +629,7 @@ Parser::ParseOpenMPDeclareMapperDirective(AccessSpecifier AS) { } if (Clauses.empty()) { Diag(Tok, diag::err_omp_expected_clause) - << getOpenMPDirectiveName(OMPD_declare_mapper); + << getOpenMPDirectiveName(OMPD_declare_mapper, OMPVersion); IsCorrect = false; } @@ -745,8 +748,10 @@ static bool parseDeclareSimdClauses( P.ConsumeToken(); } else if (ClauseName == "simdlen") { if (SimdLen.isUsable()) { + unsigned OMPVersion = P.getActions().getLangOpts().OpenMP; P.Diag(Tok, diag::err_omp_more_one_clause) - << getOpenMPDirectiveName(OMPD_declare_simd) << ClauseName << 0; + << getOpenMPDirectiveName(OMPD_declare_simd, OMPVersion) + << ClauseName << 0; IsError = true; } P.ConsumeToken(); @@ -1404,6 +1409,7 @@ bool Parser::parseOMPContextSelectors(SourceLocation Loc, OMPTraitInfo &TI) { void Parser::ParseOMPDeclareVariantClauses(Parser::DeclGroupPtrTy Ptr, CachedTokens &Toks, SourceLocation Loc) { + unsigned OMPVersion = Actions.getLangOpts().OpenMP; PP.EnterToken(Tok, /*IsReinject*/ true); PP.EnterTokenStream(Toks, /*DisableMacroExpansion=*/true, /*IsReinject*/ true); @@ -1423,7 +1429,7 @@ void Parser::ParseOMPDeclareVariantClauses(Parser::DeclGroupPtrTy Ptr, EnterExpressionEvaluationContext Unevaluated( Actions, Sema::ExpressionEvaluationContext::Unevaluated); AssociatedFunction = ParseOpenMPParensExpr( - getOpenMPDirectiveName(OMPD_declare_variant), RLoc, + getOpenMPDirectiveName(OMPD_declare_variant, OMPVersion), RLoc, /*IsAddressOfOperand=*/true); } if (!AssociatedFunction.isUsable()) { @@ -1483,7 +1489,7 @@ void Parser::ParseOMPDeclareVariantClauses(Parser::DeclGroupPtrTy Ptr, case OMPC_append_args: if (!AppendArgs.empty()) { Diag(AppendArgsLoc, diag::err_omp_more_one_clause) - << getOpenMPDirectiveName(OMPD_declare_variant) + << getOpenMPDirectiveName(OMPD_declare_variant, OMPVersion) << getOpenMPClauseName(CKind) << 0; IsError = true; } @@ -1740,8 +1746,9 @@ void Parser::ParseOpenMPAssumesDirective(OpenMPDirectiveKind DKind, bool NextIsLPar = Tok.is(tok::l_paren); // Handle unknown clauses by skipping them. if (Idx == -1) { + unsigned OMPVersion = Actions.getLangOpts().OpenMP; Diag(StartLoc, diag::warn_omp_unknown_assumption_clause_missing_id) - << llvm::omp::getOpenMPDirectiveName(DKind) + << llvm::omp::getOpenMPDirectiveName(DKind, OMPVersion) << llvm::omp::getAllAssumeClauseOptions() << NextIsLPar; if (NextIsLPar) SkipBraces(II ? II->getName() : "", /* IssueNote */ true); @@ -1854,8 +1861,9 @@ void Parser::ParseOMPDeclareTargetClauses( bool IsIndirectClause = getLangOpts().OpenMP >= 51 && getOpenMPClauseKind(ClauseName) == OMPC_indirect; if (DTCI.Indirect && IsIndirectClause) { + unsigned OMPVersion = Actions.getLangOpts().OpenMP; Diag(Tok, diag::err_omp_more_one_clause) - << getOpenMPDirectiveName(OMPD_declare_target) + << getOpenMPDirectiveName(OMPD_declare_target, OMPVersion) << getOpenMPClauseName(OMPC_indirect) << 0; break; } @@ -1988,8 +1996,9 @@ void Parser::skipUntilPragmaOpenMPEnd(OpenMPDirectiveKind DKind) { if (Tok.is(tok::annot_pragma_openmp_end)) return; + unsigned OMPVersion = Actions.getLangOpts().OpenMP; Diag(Tok, diag::warn_omp_extra_tokens_at_eol) - << getOpenMPDirectiveName(DKind); + << getOpenMPDirectiveName(DKind, OMPVersion); while (Tok.isNot(tok::annot_pragma_openmp_end)) ConsumeAnyToken(); } @@ -2008,10 +2017,12 @@ void Parser::parseOMPEndDirective(OpenMPDirectiveKind BeginKind, return; } + unsigned OMPVersion = Actions.getLangOpts().OpenMP; Diag(FoundLoc, diag::err_expected_end_declare_target_or_variant) << DiagSelection; Diag(BeginLoc, diag::note_matching) - << ("'#pragma omp " + getOpenMPDirectiveName(BeginKind) + "'").str(); + << ("'#pragma omp " + getOpenMPDirectiveName(BeginKind, OMPVersion) + "'") + .str(); if (SkipUntilOpenMPEnd) SkipUntil(tok::annot_pragma_openmp_end, StopBeforeMatch); } @@ -2070,6 +2081,7 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl( "Not an OpenMP directive!"); ParsingOpenMPDirectiveRAII DirScope(*this); ParenBraceBracketBalancer BalancerRAIIObj(*this); + unsigned OMPVersion = Actions.getLangOpts().OpenMP; SourceLocation Loc; OpenMPDirectiveKind DKind; @@ -2163,7 +2175,7 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl( llvm::SmallBitVector SeenClauses(llvm::omp::Clause_enumSize + 1); if (Tok.is(tok::annot_pragma_openmp_end)) { Diag(Tok, diag::err_omp_expected_clause) - << getOpenMPDirectiveName(OMPD_requires); + << getOpenMPDirectiveName(OMPD_requires, OMPVersion); break; } while (Tok.isNot(tok::annot_pragma_openmp_end)) { @@ -2190,7 +2202,7 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl( // Consume final annot_pragma_openmp_end if (Clauses.empty()) { Diag(Tok, diag::err_omp_expected_clause) - << getOpenMPDirectiveName(OMPD_requires); + << getOpenMPDirectiveName(OMPD_requires, OMPVersion); ConsumeAnnotationToken(); return nullptr; } @@ -2378,7 +2390,7 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl( case OMPD_end_declare_target: { if (!Actions.OpenMP().isInOpenMPDeclareTargetContext()) { Diag(Tok, diag::err_omp_unexpected_directive) - << 1 << getOpenMPDirectiveName(DKind); + << 1 << getOpenMPDirectiveName(DKind, OMPVersion); break; } const SemaOpenMP::DeclareTargetContextInfo &DTCI = @@ -2388,7 +2400,7 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl( } case OMPD_assume: { Diag(Tok, diag::err_omp_unexpected_directive) - << 1 << getOpenMPDirectiveName(DKind); + << 1 << getOpenMPDirectiveName(DKind, OMPVersion); break; } case OMPD_unknown: @@ -2401,7 +2413,7 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl( case Category::Subsidiary: case Category::Utility: Diag(Tok, diag::err_omp_unexpected_directive) - << 1 << getOpenMPDirectiveName(DKind); + << 1 << getOpenMPDirectiveName(DKind, OMPVersion); break; case Category::Declarative: case Category::Informational: @@ -2418,6 +2430,7 @@ StmtResult Parser::ParseOpenMPExecutableDirective( ParsedStmtContext StmtCtx, OpenMPDirectiveKind DKind, SourceLocation Loc, bool ReadDirectiveWithinMetadirective) { assert(isOpenMPExecutableDirective(DKind) && "Unexpected directive category"); + unsigned OMPVersion = Actions.getLangOpts().OpenMP; bool HasAssociatedStatement = true; Association Assoc = getDirectiveAssociation(DKind); @@ -2431,7 +2444,7 @@ StmtResult Parser::ParseOpenMPExecutableDirective( if ((StmtCtx & ParsedStmtContext::AllowStandaloneOpenMPDirectives) == ParsedStmtContext()) { Diag(Tok, diag::err_omp_immediate_directive) - << getOpenMPDirectiveName(DKind) << 0; + << getOpenMPDirectiveName(DKind, OMPVersion) << 0; if (DKind == OMPD_error) { SkipUntil(tok::annot_pragma_openmp_end); return StmtError(); @@ -2541,7 +2554,8 @@ StmtResult Parser::ParseOpenMPExecutableDirective( if ((StmtCtx & ParsedStmtContext::AllowStandaloneOpenMPDirectives) == ParsedStmtContext()) { Diag(Loc, diag::err_omp_immediate_directive) - << getOpenMPDirectiveName(DKind) << 1 << getOpenMPClauseName(CK); + << getOpenMPDirectiveName(DKind, OMPVersion) << 1 + << getOpenMPClauseName(CK); } HasAssociatedStatement = false; } @@ -2551,7 +2565,7 @@ StmtResult Parser::ParseOpenMPExecutableDirective( if ((DKind == OMPD_tile || DKind == OMPD_stripe) && !SeenClauses[unsigned(OMPC_sizes)]) { Diag(Loc, diag::err_omp_required_clause) - << getOpenMPDirectiveName(DKind) << "sizes"; + << getOpenMPDirectiveName(DKind, OMPVersion) << "sizes"; } StmtResult AssociatedStmt; @@ -2707,6 +2721,7 @@ StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective( SourceLocation Loc = ReadDirectiveWithinMetadirective ? Tok.getLocation() : ConsumeAnnotationToken(); + unsigned OMPVersion = Actions.getLangOpts().OpenMP; OpenMPDirectiveKind DKind = parseOpenMPDirectiveKind(*this); if (ReadDirectiveWithinMetadirective && DKind == OMPD_unknown) { Diag(Tok, diag::err_omp_unknown_directive); @@ -2909,7 +2924,7 @@ StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective( if ((StmtCtx & ParsedStmtContext::AllowStandaloneOpenMPDirectives) == ParsedStmtContext()) { Diag(Tok, diag::err_omp_immediate_directive) - << getOpenMPDirectiveName(DKind) << 0; + << getOpenMPDirectiveName(DKind, OMPVersion) << 0; } ConsumeToken(); DeclDirectiveListParserHelper Helper(this, DKind); @@ -2928,7 +2943,7 @@ StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective( if ((StmtCtx & ParsedStmtContext::AllowStandaloneOpenMPDirectives) == ParsedStmtContext()) { Diag(Tok, diag::err_omp_immediate_directive) - << getOpenMPDirectiveName(DKind) << 0; + << getOpenMPDirectiveName(DKind, OMPVersion) << 0; } ConsumeToken(); DeclDirectiveListParserHelper Helper(this, DKind); @@ -3001,7 +3016,7 @@ StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective( if (HasImplicitMappings) { Diag(Tok, diag::err_omp_unexpected_directive) - << 1 << getOpenMPDirectiveName(DKind); + << 1 << getOpenMPDirectiveName(DKind, OMPVersion); SkipUntil(tok::annot_pragma_openmp_end); break; } @@ -3020,7 +3035,7 @@ StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective( case OMPD_end_declare_variant: case OMPD_declare_variant: Diag(Tok, diag::err_omp_unexpected_directive) - << 1 << getOpenMPDirectiveName(DKind); + << 1 << getOpenMPDirectiveName(DKind, OMPVersion); SkipUntil(tok::annot_pragma_openmp_end); break; case OMPD_assume: { @@ -3049,10 +3064,11 @@ bool Parser::ParseOpenMPSimpleVarList( const llvm::function_ref<void(CXXScopeSpec &, DeclarationNameInfo)> &Callback, bool AllowScopeSpecifier) { + unsigned OMPVersion = Actions.getLangOpts().OpenMP; // Parse '('. BalancedDelimiterTracker T(*this, tok::l_paren, tok::annot_pragma_openmp_end); if (T.expectAndConsume(diag::err_expected_lparen_after, - getOpenMPDirectiveName(Kind).data())) + getOpenMPDirectiveName(Kind, OMPVersion).data())) return true; bool IsCorrect = true; bool NoIdentIsFound = true; @@ -3205,11 +3221,14 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, OMPClause *Clause = nullptr; bool ErrorFound = false; bool WrongDirective = false; + unsigned OMPVersion = Actions.getLangOpts().OpenMP; + // Check if clause is allowed for the given directive. if (CKind != OMPC_unknown && !isAllowedClauseForDirective(DKind, CKind, getLangOpts().OpenMP)) { Diag(Tok, diag::err_omp_unexpected_clause) - << getOpenMPClauseName(CKind) << getOpenMPDirectiveName(DKind); + << getOpenMPClauseName(CKind) + << getOpenMPDirectiveName(DKind, OMPVersion); ErrorFound = true; WrongDirective = true; } @@ -3264,7 +3283,8 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, // At most one message clause can appear on the directive if (!FirstClause) { Diag(Tok, diag::err_omp_more_one_clause) - << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(CKind) << 0; + << getOpenMPDirectiveName(DKind, OMPVersion) + << getOpenMPClauseName(CKind) << 0; ErrorFound = true; } @@ -3298,7 +3318,8 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, // At most one bind clause can appear on a loop directive. if (!FirstClause) { Diag(Tok, diag::err_omp_more_one_clause) - << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(CKind) << 0; + << getOpenMPDirectiveName(DKind, OMPVersion) + << getOpenMPClauseName(CKind) << 0; ErrorFound = true; } @@ -3320,7 +3341,8 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, if ((getLangOpts().OpenMP < 50 || CKind != OMPC_defaultmap) && (CKind != OMPC_order || getLangOpts().OpenMP >= 51) && !FirstClause) { Diag(Tok, diag::err_omp_more_one_clause) - << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(CKind) << 0; + << getOpenMPDirectiveName(DKind, OMPVersion) + << getOpenMPClauseName(CKind) << 0; ErrorFound = true; } [[fallthrough]]; @@ -3359,7 +3381,8 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, // Each of the requires clauses can appear at most once on the directive. if (!FirstClause) { Diag(Tok, diag::err_omp_more_one_clause) - << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(CKind) << 0; + << getOpenMPDirectiveName(DKind, OMPVersion) + << getOpenMPClauseName(CKind) << 0; ErrorFound = true; } @@ -3369,12 +3392,13 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, // OpenMP [6.0, self_maps clause] if (getLangOpts().OpenMP < 60) { Diag(Tok, diag::err_omp_expected_clause) - << getOpenMPDirectiveName(OMPD_requires); + << getOpenMPDirectiveName(OMPD_requires, OMPVersion); ErrorFound = true; } if (!FirstClause) { Diag(Tok, diag::err_omp_more_one_clause) - << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(CKind) << 0; + << getOpenMPDirectiveName(DKind, OMPVersion) + << getOpenMPClauseName(CKind) << 0; ErrorFound = true; } Clause = ParseOpenMPClause(CKind, WrongDirective); @@ -3382,7 +3406,8 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, case OMPC_update: if (!FirstClause) { Diag(Tok, diag::err_omp_more_one_clause) - << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(CKind) << 0; + << getOpenMPDirectiveName(DKind, OMPVersion) + << getOpenMPClauseName(CKind) << 0; ErrorFound = true; } @@ -3394,7 +3419,8 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, case OMPC_thread_limit: if (!FirstClause) { Diag(Tok, diag::err_omp_more_one_clause) - << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(CKind) << 0; + << getOpenMPDirectiveName(DKind, OMPVersion) + << getOpenMPClauseName(CKind) << 0; ErrorFound = true; } [[fallthrough]]; @@ -3433,7 +3459,8 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, case OMPC_sizes: if (!FirstClause) { Diag(Tok, diag::err_omp_more_one_clause) - << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(CKind) << 0; + << getOpenMPDirectiveName(DKind, OMPVersion) + << getOpenMPClauseName(CKind) << 0; ErrorFound = true; } @@ -3442,7 +3469,8 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, case OMPC_permutation: if (!FirstClause) { Diag(Tok, diag::err_omp_more_one_clause) - << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(CKind) << 0; + << getOpenMPDirectiveName(DKind, OMPVersion) + << getOpenMPClauseName(CKind) << 0; ErrorFound = true; } Clause = ParseOpenMPPermutationClause(); @@ -3454,7 +3482,8 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, if (DKind != OMPD_interop) { if (!FirstClause) { Diag(Tok, diag::err_omp_more_one_clause) - << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(CKind) << 0; + << getOpenMPDirectiveName(DKind, OMPVersion) + << getOpenMPClauseName(CKind) << 0; ErrorFound = true; } Clause = ParseOpenMPClause(CKind, WrongDirective); @@ -3474,7 +3503,8 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, case OMPC_match: if (!WrongDirective) Diag(Tok, diag::err_omp_unexpected_clause) - << getOpenMPClauseName(CKind) << getOpenMPDirectiveName(DKind); + << getOpenMPClauseName(CKind) + << getOpenMPDirectiveName(DKind, OMPVersion); SkipUntil(tok::comma, tok::annot_pragma_openmp_end, StopBeforeMatch); break; case OMPC_absent: @@ -3490,7 +3520,8 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, if (DK == OMPD_unknown) { skipUntilPragmaOpenMPEnd(OMPD_assume); Diag(Tok, diag::err_omp_unexpected_clause) - << getOpenMPClauseName(CKind) << getOpenMPDirectiveName(DKind); + << getOpenMPClauseName(CKind) + << getOpenMPDirectiveName(DKind, OMPVersion); break; } if (isOpenMPExecutableDirective(DK)) { @@ -3498,7 +3529,8 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, ConsumeToken(); } else { Diag(Tok, diag::err_omp_unexpected_clause) - << getOpenMPClauseName(CKind) << getOpenMPDirectiveName(DKind); + << getOpenMPClauseName(CKind) + << getOpenMPDirectiveName(DKind, OMPVersion); } } while (TryConsumeToken(tok::comma)); RLoc = Tok.getLocation(); @@ -3513,7 +3545,8 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, case OMPC_no_parallelism: { if (!FirstClause) { Diag(Tok, diag::err_omp_more_one_clause) - << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(CKind) << 0; + << getOpenMPDirectiveName(DKind, OMPVersion) + << getOpenMPClauseName(CKind) << 0; ErrorFound = true; } SourceLocation Loc = ConsumeToken(); @@ -3531,7 +3564,8 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, // to explicitly check whether this clause is applied to an `omp target` // without `teams` and emit an error. Diag(Tok, diag::err_omp_unexpected_clause) - << getOpenMPClauseName(CKind) << getOpenMPDirectiveName(DKind); + << getOpenMPClauseName(CKind) + << getOpenMPDirectiveName(DKind, OMPVersion); ErrorFound = true; WrongDirective = true; } @@ -3540,7 +3574,8 @@ OMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, << getOpenMPClauseName(CKind) << "target teams"; if (!ErrorFound && !getLangOpts().OpenMPExtensions) { Diag(Tok, diag::err_omp_unexpected_clause_extension_only) - << getOpenMPClauseName(CKind) << getOpenMPDirectiveName(DKind); + << getOpenMPClauseName(CKind) + << getOpenMPDirectiveName(DKind, OMPVersion); ErrorFound = true; } Clause = ParseOpenMPClause(CKind, WrongDirective); @@ -5077,11 +5112,14 @@ bool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind, ConsumeToken(); else if (Tok.isNot(tok::r_paren) && Tok.isNot(tok::annot_pragma_openmp_end) && - (!MayHaveTail || Tok.isNot(tok::colon))) + (!MayHaveTail || Tok.isNot(tok::colon))) { + unsigned OMPVersion = Actions.getLangOpts().OpenMP; Diag(Tok, diag::err_omp_expected_punc) - << ((Kind == OMPC_flush) ? getOpenMPDirectiveName(OMPD_flush) - : getOpenMPClauseName(Kind)) + << ((Kind == OMPC_flush) + ? getOpenMPDirectiveName(OMPD_flush, OMPVersion) + : getOpenMPClauseName(Kind)) << (Kind == OMPC_flush); + } } // Parse ')' for linear clause with modifier. |