llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Krzysztof Parzyszek (kparzysz) <details> <summary>Changes</summary> The "alternativeName" was introduced ~5 years ago in D82405, and at the moment it has only one use, the one that the original change introduced. OpenMP 6.0 spec has introduced different spellings of some directives, but the "alternativeName" is not an adequate mechanism to implement it. For those reasons remove the "alternativeName" member from both Clause and Directive in DirectiveBase.td. Since the alternativeName text appeared in a number of clang OpenMP tests, implement `getOpenMPClauseNameForDiag` in SemaOpenMP.cpp to preserve the text of the diagnostics. --- Patch is 51.37 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/138179.diff 5 Files Affected: - (modified) clang/lib/Sema/SemaOpenMP.cpp (+144-133) - (modified) llvm/include/llvm/Frontend/Directive/DirectiveBase.td (-7) - (modified) llvm/include/llvm/Frontend/OpenMP/OMP.td (-1) - (modified) llvm/include/llvm/TableGen/DirectiveEmitter.h (-4) - (modified) llvm/utils/TableGen/Basic/DirectiveEmitter.cpp (+1-6) ``````````diff diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index 274d3b90ff30f..71cc31c4745c2 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -60,6 +60,8 @@ static const Expr *checkMapClauseExpressionBase( OMPClauseMappableExprCommon::MappableExprComponentList &CurComponents, OpenMPClauseKind CKind, OpenMPDirectiveKind DKind, bool NoDiagnose); +static std::string getOpenMPClauseNameForDiag(OpenMPClauseKind C); + namespace { /// Default data sharing attributes, which can be applied to directive. enum DefaultDataSharingAttributes { @@ -680,10 +682,10 @@ class DSAStackTy { if (CNew->getClauseKind() == CPrev->getClauseKind()) { SemaRef.Diag(CNew->getBeginLoc(), diag::err_omp_requires_clause_redeclaration) - << getOpenMPClauseName(CNew->getClauseKind()); + << getOpenMPClauseNameForDiag(CNew->getClauseKind()); SemaRef.Diag(CPrev->getBeginLoc(), diag::note_omp_requires_previous_clause) - << getOpenMPClauseName(CPrev->getClauseKind()); + << getOpenMPClauseNameForDiag(CPrev->getClauseKind()); IsDuplicate = true; } } @@ -1264,6 +1266,12 @@ static ValueDecl *getCanonicalDecl(ValueDecl *D) { getCanonicalDecl(const_cast<const ValueDecl *>(D))); } +static std::string getOpenMPClauseNameForDiag(OpenMPClauseKind C) { + if (C == OMPC_threadprivate) + return getOpenMPClauseName(C).str() + " or thread local"; + return getOpenMPClauseName(C).str(); +} + DSAStackTy::DSAVarData DSAStackTy::getDSA(const_iterator &Iter, ValueDecl *D) const { D = getCanonicalDecl(D); @@ -1704,7 +1712,7 @@ static bool rejectConstNotMutableType(Sema &SemaRef, const ValueDecl *D, unsigned Diag = ListItemNotVar ? diag::err_omp_const_list_item : IsClassType ? diag::err_omp_const_not_mutable_variable : diag::err_omp_const_variable; - SemaRef.Diag(ELoc, Diag) << getOpenMPClauseName(CKind); + SemaRef.Diag(ELoc, Diag) << getOpenMPClauseNameForDiag(CKind); if (!ListItemNotVar && D) { const VarDecl *VD = dyn_cast<VarDecl>(D); bool IsDecl = !VD || VD->isThisDeclarationADefinition(Context) == @@ -3587,7 +3595,7 @@ SemaOpenMP::CheckOMPRequiresDecl(SourceLocation Loc, isa<OMPReverseOffloadClause>(CNew) || isa<OMPDynamicAllocatorsClause>(CNew)) { Diag(Loc, diag::err_omp_directive_before_requires) - << "target" << getOpenMPClauseName(CNew->getClauseKind()); + << "target" << getOpenMPClauseNameForDiag(CNew->getClauseKind()); for (SourceLocation TargetLoc : TargetLocations) { Diag(TargetLoc, diag::note_omp_requires_encountered_directive) << "target"; @@ -3595,7 +3603,7 @@ SemaOpenMP::CheckOMPRequiresDecl(SourceLocation Loc, } else if (!AtomicLoc.isInvalid() && isa<OMPAtomicDefaultMemOrderClause>(CNew)) { Diag(Loc, diag::err_omp_directive_before_requires) - << "atomic" << getOpenMPClauseName(CNew->getClauseKind()); + << "atomic" << getOpenMPClauseNameForDiag(CNew->getClauseKind()); Diag(AtomicLoc, diag::note_omp_requires_encountered_directive) << "atomic"; } @@ -3614,7 +3622,7 @@ static void reportOriginalDsa(Sema &SemaRef, const DSAStackTy *Stack, bool IsLoopIterVar) { if (DVar.RefExpr) { SemaRef.Diag(DVar.RefExpr->getExprLoc(), diag::note_omp_explicit_dsa) - << getOpenMPClauseName(DVar.CKind); + << getOpenMPClauseNameForDiag(DVar.CKind); return; } enum { @@ -3661,7 +3669,7 @@ static void reportOriginalDsa(Sema &SemaRef, const DSAStackTy *Stack, << getOpenMPDirectiveName(Stack->getCurrentDirective()); } else if (DVar.ImplicitDSALoc.isValid()) { SemaRef.Diag(DVar.ImplicitDSALoc, diag::note_omp_implicit_dsa) - << getOpenMPClauseName(DVar.CKind); + << getOpenMPClauseNameForDiag(DVar.CKind); } } @@ -4566,7 +4574,7 @@ static bool checkOrderedOrderSpecified(Sema &S, if (Ordered && Order) { S.Diag(Order->getKindKwLoc(), diag::err_omp_simple_clause_incompatible_with_ordered) - << getOpenMPClauseName(OMPC_order) + << getOpenMPClauseNameForDiag(OMPC_order) << getOpenMPSimpleClauseTypeName(OMPC_order, OMPC_ORDER_concurrent) << SourceRange(Order->getBeginLoc(), Order->getEndLoc()); S.Diag(Ordered->getBeginLoc(), diag::note_omp_ordered_param) @@ -4654,7 +4662,7 @@ StmtResult SemaOpenMP::ActOnOpenMPRegionEnd(StmtResult S, ? SC->getFirstScheduleModifierLoc() : SC->getSecondScheduleModifierLoc(), diag::err_omp_simple_clause_incompatible_with_ordered) - << getOpenMPClauseName(OMPC_schedule) + << getOpenMPClauseNameForDiag(OMPC_schedule) << getOpenMPSimpleClauseTypeName(OMPC_schedule, OMPC_SCHEDULE_MODIFIER_nonmonotonic) << SourceRange(OC->getBeginLoc(), OC->getEndLoc()); @@ -5068,8 +5076,9 @@ static bool checkIfClauses(Sema &S, OpenMPDirectiveKind Kind, auto &FNM = FoundNameModifiers[CurNM]; if (FNM) { S.Diag(C->getBeginLoc(), diag::err_omp_more_one_clause) - << getOpenMPDirectiveName(Kind) << getOpenMPClauseName(OMPC_if) - << (CurNM != OMPD_unknown) << getOpenMPDirectiveName(CurNM); + << getOpenMPDirectiveName(Kind) + << getOpenMPClauseNameForDiag(OMPC_if) << (CurNM != OMPD_unknown) + << getOpenMPDirectiveName(CurNM); ErrorFound = true; } else if (CurNM != OMPD_unknown) { NameModifierLoc.push_back(IC->getNameModifierLoc()); @@ -6755,10 +6764,10 @@ SemaOpenMP::DeclGroupPtrTy SemaOpenMP::ActOnOpenMPDeclareSimdDirective( auto [It, Inserted] = AlignedArgs.try_emplace(CanonPVD, E); if (!Inserted) { Diag(E->getExprLoc(), diag::err_omp_used_in_clause_twice) - << 1 << getOpenMPClauseName(OMPC_aligned) + << 1 << getOpenMPClauseNameForDiag(OMPC_aligned) << E->getSourceRange(); Diag(It->second->getExprLoc(), diag::note_omp_explicit_dsa) - << getOpenMPClauseName(OMPC_aligned); + << getOpenMPClauseNameForDiag(OMPC_aligned); continue; } QualType QTy = PVD->getType() @@ -6777,9 +6786,10 @@ SemaOpenMP::DeclGroupPtrTy SemaOpenMP::ActOnOpenMPDeclareSimdDirective( if (isa<CXXThisExpr>(E)) { if (AlignedThis) { Diag(E->getExprLoc(), diag::err_omp_used_in_clause_twice) - << 2 << getOpenMPClauseName(OMPC_aligned) << E->getSourceRange(); + << 2 << getOpenMPClauseNameForDiag(OMPC_aligned) + << E->getSourceRange(); Diag(AlignedThis->getExprLoc(), diag::note_omp_explicit_dsa) - << getOpenMPClauseName(OMPC_aligned); + << getOpenMPClauseNameForDiag(OMPC_aligned); } AlignedThis = E; continue; @@ -6824,20 +6834,21 @@ SemaOpenMP::DeclGroupPtrTy SemaOpenMP::ActOnOpenMPDeclareSimdDirective( // A list-item cannot appear in more than one linear clause. if (auto It = LinearArgs.find(CanonPVD); It != LinearArgs.end()) { Diag(E->getExprLoc(), diag::err_omp_wrong_dsa) - << getOpenMPClauseName(OMPC_linear) - << getOpenMPClauseName(OMPC_linear) << E->getSourceRange(); + << getOpenMPClauseNameForDiag(OMPC_linear) + << getOpenMPClauseNameForDiag(OMPC_linear) + << E->getSourceRange(); Diag(It->second->getExprLoc(), diag::note_omp_explicit_dsa) - << getOpenMPClauseName(OMPC_linear); + << getOpenMPClauseNameForDiag(OMPC_linear); continue; } // Each argument can appear in at most one uniform or linear clause. if (auto It = UniformedArgs.find(CanonPVD); It != UniformedArgs.end()) { Diag(E->getExprLoc(), diag::err_omp_wrong_dsa) - << getOpenMPClauseName(OMPC_linear) - << getOpenMPClauseName(OMPC_uniform) << E->getSourceRange(); + << getOpenMPClauseNameForDiag(OMPC_linear) + << getOpenMPClauseNameForDiag(OMPC_uniform) << E->getSourceRange(); Diag(It->second->getExprLoc(), diag::note_omp_explicit_dsa) - << getOpenMPClauseName(OMPC_uniform); + << getOpenMPClauseNameForDiag(OMPC_uniform); continue; } LinearArgs[CanonPVD] = E; @@ -6854,11 +6865,11 @@ SemaOpenMP::DeclGroupPtrTy SemaOpenMP::ActOnOpenMPDeclareSimdDirective( if (isa<CXXThisExpr>(E)) { if (UniformedLinearThis) { Diag(E->getExprLoc(), diag::err_omp_wrong_dsa) - << getOpenMPClauseName(OMPC_linear) - << getOpenMPClauseName(IsUniformedThis ? OMPC_uniform : OMPC_linear) + << getOpenMPClauseNameForDiag(OMPC_linear) + << getOpenMPClauseNameForDiag(IsUniformedThis ? OMPC_uniform : OMPC_linear) << E->getSourceRange(); Diag(UniformedLinearThis->getExprLoc(), diag::note_omp_explicit_dsa) - << getOpenMPClauseName(IsUniformedThis ? OMPC_uniform + << getOpenMPClauseNameForDiag(IsUniformedThis ? OMPC_uniform : OMPC_linear); continue; } @@ -7549,10 +7560,10 @@ void SemaOpenMP::ActOnOpenMPDeclareVariantDirective( llvm::omp::TraitProperty::construct_dispatch_dispatch)) { if (!AllAdjustArgs.empty()) Diag(AdjustArgsLoc, diag::err_omp_clause_requires_dispatch_construct) - << getOpenMPClauseName(OMPC_adjust_args); + << getOpenMPClauseNameForDiag(OMPC_adjust_args); if (!AppendArgs.empty()) Diag(AppendArgsLoc, diag::err_omp_clause_requires_dispatch_construct) - << getOpenMPClauseName(OMPC_append_args); + << getOpenMPClauseNameForDiag(OMPC_append_args); return; } } @@ -9127,8 +9138,8 @@ void SemaOpenMP::ActOnOpenMPLoopInitialization(SourceLocation ForLoc, DVar.CKind != OMPC_private && DVar.CKind != OMPC_lastprivate)) && (DVar.CKind != OMPC_private || DVar.RefExpr)) { Diag(Init->getBeginLoc(), diag::err_omp_loop_var_dsa) - << getOpenMPClauseName(DVar.CKind) << getOpenMPDirectiveName(DKind) - << getOpenMPClauseName(PredeterminedCKind); + << getOpenMPClauseNameForDiag(DVar.CKind) << getOpenMPDirectiveName(DKind) + << getOpenMPClauseNameForDiag(PredeterminedCKind); if (DVar.RefExpr == nullptr) DVar.CKind = PredeterminedCKind; reportOriginalDsa(SemaRef, DSAStack, D, DVar, /*IsLoopIterVar=*/true); @@ -10984,10 +10995,10 @@ static bool checkMutuallyExclusiveClauses( PrevClause = C; } else if (PrevClause->getClauseKind() != C->getClauseKind()) { S.Diag(C->getBeginLoc(), diag::err_omp_clauses_mutually_exclusive) - << getOpenMPClauseName(C->getClauseKind()) - << getOpenMPClauseName(PrevClause->getClauseKind()); + << getOpenMPClauseNameForDiag(C->getClauseKind()) + << getOpenMPClauseNameForDiag(PrevClause->getClauseKind()); S.Diag(PrevClause->getBeginLoc(), diag::note_omp_previous_clause) - << getOpenMPClauseName(PrevClause->getClauseKind()); + << getOpenMPClauseNameForDiag(PrevClause->getClauseKind()); ErrorFound = true; } } @@ -11113,7 +11124,7 @@ StmtResult SemaOpenMP::ActOnOpenMPFlushDirective(ArrayRef<OMPClause *> Clauses, << getOpenMPDirectiveName(OMPD_flush) << 1 << SourceRange(C->getBeginLoc(), C->getEndLoc()); Diag(MemOrderLoc, diag::note_omp_previous_mem_order_clause) - << getOpenMPClauseName(MemOrderKind); + << getOpenMPClauseNameForDiag(MemOrderKind); } else { MemOrderKind = C->getClauseKind(); MemOrderLoc = C->getBeginLoc(); @@ -11122,9 +11133,9 @@ StmtResult SemaOpenMP::ActOnOpenMPFlushDirective(ArrayRef<OMPClause *> Clauses, } if (FC && OrderClause) { Diag(FC->getLParenLoc(), diag::err_omp_flush_order_clause_and_list) - << getOpenMPClauseName(OrderClause->getClauseKind()); + << getOpenMPClauseNameForDiag(OrderClause->getClauseKind()); Diag(OrderClause->getBeginLoc(), diag::note_omp_flush_order_clause_here) - << getOpenMPClauseName(OrderClause->getClauseKind()); + << getOpenMPClauseNameForDiag(OrderClause->getClauseKind()); return StmtError(); } return OMPFlushDirective::Create(getASTContext(), StartLoc, EndLoc, Clauses); @@ -11207,7 +11218,7 @@ SemaOpenMP::ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses, if ((DC && DependSourceClause) || (DOC && DoacrossSourceClause)) { Diag(C->getBeginLoc(), diag::err_omp_more_one_clause) << getOpenMPDirectiveName(OMPD_ordered) - << getOpenMPClauseName(DC ? OMPC_depend : OMPC_doacross) << 2; + << getOpenMPClauseNameForDiag(DC ? OMPC_depend : OMPC_doacross) << 2; ErrorFound = true; } else { if (DC) @@ -11250,15 +11261,15 @@ SemaOpenMP::ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses, SourceLocation Loc = DependFound ? DependFound->getBeginLoc() : DoacrossFound->getBeginLoc(); Diag(Loc, diag::err_omp_depend_clause_thread_simd) - << getOpenMPClauseName(DependFound ? OMPC_depend : OMPC_doacross) - << getOpenMPClauseName(TC ? TC->getClauseKind() : SC->getClauseKind()); + << getOpenMPClauseNameForDiag(DependFound ? OMPC_depend : OMPC_doacross) + << getOpenMPClauseNameForDiag(TC ? TC->getClauseKind() : SC->getClauseKind()); ErrorFound = true; } else if ((DependFound || DoacrossFound) && !DSAStack->getParentOrderedRegionParam().first) { SourceLocation Loc = DependFound ? DependFound->getBeginLoc() : DoacrossFound->getBeginLoc(); Diag(Loc, diag::err_omp_ordered_directive_without_param) - << getOpenMPClauseName(DependFound ? OMPC_depend : OMPC_doacross); + << getOpenMPClauseNameForDiag(DependFound ? OMPC_depend : OMPC_doacross); ErrorFound = true; } else if (TC || Clauses.empty()) { if (const Expr *Param = DSAStack->getParentOrderedRegionParam().first) { @@ -12387,7 +12398,7 @@ StmtResult SemaOpenMP::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Diag(C->getBeginLoc(), diag::err_omp_atomic_several_clauses) << SourceRange(C->getBeginLoc(), C->getEndLoc()); Diag(AtomicKindLoc, diag::note_omp_previous_mem_order_clause) - << getOpenMPClauseName(AtomicKind); + << getOpenMPClauseNameForDiag(AtomicKind); } else { AtomicKind = C->getClauseKind(); AtomicKindLoc = C->getBeginLoc(); @@ -12395,7 +12406,7 @@ StmtResult SemaOpenMP::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Diag(C->getBeginLoc(), diag::err_omp_atomic_several_clauses) << SourceRange(C->getBeginLoc(), C->getEndLoc()); Diag(AtomicKindLoc, diag::note_omp_previous_mem_order_clause) - << getOpenMPClauseName(AtomicKind); + << getOpenMPClauseNameForDiag(AtomicKind); } } break; @@ -12404,7 +12415,7 @@ StmtResult SemaOpenMP::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, case OMPC_fail: { if (!EncounteredAtomicKinds.contains(OMPC_compare)) { Diag(C->getBeginLoc(), diag::err_omp_atomic_no_compare) - << getOpenMPClauseName(C->getClauseKind()) + << getOpenMPClauseNameForDiag(C->getClauseKind()) << SourceRange(C->getBeginLoc(), C->getEndLoc()); return StmtError(); } @@ -12420,7 +12431,7 @@ StmtResult SemaOpenMP::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, << getOpenMPDirectiveName(OMPD_atomic) << 0 << SourceRange(C->getBeginLoc(), C->getEndLoc()); Diag(MemOrderLoc, diag::note_omp_previous_mem_order_clause) - << getOpenMPClauseName(MemOrderKind); + << getOpenMPClauseNameForDiag(MemOrderKind); } else { MemOrderKind = C->getClauseKind(); MemOrderLoc = C->getBeginLoc(); @@ -12456,11 +12467,11 @@ StmtResult SemaOpenMP::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, if (AtomicKind == OMPC_unknown) Loc = StartLoc; Diag(Loc, diag::err_omp_atomic_incompatible_mem_order_clause) - << getOpenMPClauseName(AtomicKind) + << getOpenMPClauseNameForDiag(AtomicKind) << (AtomicKind == OMPC_unknown ? 1 : 0) - << getOpenMPClauseName(MemOrderKind); + << getOpenMPClauseNameForDiag(MemOrderKind); Diag(MemOrderLoc, diag::note_omp_previous_mem_order_clause) - << getOpenMPClauseName(MemOrderKind); + << getOpenMPClauseNameForDiag(MemOrderKind); } Stmt *Body = AStmt; @@ -13161,7 +13172,7 @@ static bool checkNumExprsInClause(SemaBase &SemaRef, auto VarList = C->getVarRefs(); if (VarList.size() > MaxNum) { SemaRef.Diag(VarList[MaxNum]->getBeginLoc(), Diag) - << getOpenMPClauseName(C->getClauseKind()); + << getOpenMPClauseNameForDiag(C->getClauseKind()); return false; } return true; @@ -15796,7 +15807,7 @@ isNonNegativeIntegerValue(Expr *&ValExpr, Sema &SemaRef, OpenMPClauseKind CKind, !((!StrictlyPositive && Result->isNonNegative()) || (StrictlyPositive && Result->isStrictlyPositive()))) { SemaRef.Diag(Loc, diag::err_omp_negative_expression_in_clause) - << getOpenMPClauseName(CKind) << (StrictlyPositive ? 1 : 0) + << getOpenMPClauseNameForDiag(CKind) << (StrictlyPositive ? 1 : 0) << ValExpr->getSourceRange(); return false; } @@ -15877,7 +15888,7 @@ ExprResult SemaOpenMP::VerifyPositiveIntegerConstantInClause( if ((StrictlyPositive && !Result.isStrictlyPositive()) || (!StrictlyPositive && !Result.isNonNegative())) { Diag(E->getExprLoc(), diag::err_omp_negative_expression_in_clause) - << getOpenMPClauseName(CKind) << (StrictlyPositive ? 1 : 0) + << getOpenMPClauseNameForDiag(CKind) << (StrictlyPositive ? 1 : 0) << E->getSourceRange(); return ExprError(); } @@ -16227,7 +16238,7 @@ OMPClause *SemaOpenMP::ActOnOpenMPDefaultClause(DefaultKind Kind, Diag(KindKwLoc, diag::err_omp_unexpected_clause_value) << getListOfPossibleValues(OMPC_default, /*First=*/0, /*Last=*/unsigned(OMP_DEFAULT_unknown)) - << getOpenMPClauseName(OMPC_default); + << getOpenMPClauseNameForDiag(OMPC_default); return nullptr; } @@ -16266,7 +16277,7 @@ OMPClause *SemaOpenMP::ActOnOpenMPProcBindClause(ProcBindKind Kind, ? OMP_PROC_BIND_primary : OMP_PROC_BIND_spread) + 1) - << getOpenMPClauseName(OMPC_proc_bind); + << getOpenMPClauseNameForDiag(OMPC_proc_bind); return nullptr; } if (Kind == OMP_PROC_BIND_primary && getLangOpts().OpenMP < 51) @@ -16275,7 +16286,7 @@ OMPClause *SemaOpenMP::ActOnOpenMPProcBindClause(ProcBindKind Kind, /*First=*/unsigned(OMP_PROC_BIND_master), /*Last=*/ unsigned(OMP_PROC_BIND_spread) + 1) - << getOpenMPClauseName(OMPC_proc_bind); + << getOpenMPClauseNameForDiag(OMPC_proc_bind); return new (getASTContext()) OMPProcBindClause(Kind, KindKwLoc, StartLoc, LParenLoc, EndLoc); } @@ -16288,7 +16299,7 @@ OMPClause *SemaOpenMP::ActOnOpenMPAtomicDefaultMemOrderClause( << getListOfPossibleValues( OMPC_atomic_default_mem_order, /*First=*/0, /*Last=*/OMPC_ATOMIC_DEFAULT_MEM_ORDER_unknown) - << getOpenMPClauseName(OMPC_atomic_default_mem_order); + << getOpenMPClauseNameForDiag(OMPC_atomic_default_mem_order); return nullptr; }... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/138179 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits