diff --git a/clang/include/clang/AST/DeclBase.h b/clang/include/clang/AST/DeclBase.h index ba6dadd7d3563..7b743edf94525 100644 --- a/clang/include/clang/AST/DeclBase.h +++ b/clang/include/clang/AST/DeclBase.h @@ -1422,6 +1422,12 @@ enum class ArgPassingKind { CanNeverPassInRegs }; +enum class OMPDeclareReductionInitKind { + Call, // Initialized by function call. + Direct, // omp_priv() + Copy // omp_priv = +}; + /// DeclContext - This is used only as base class of specific decl types that /// can act as declaration contexts. These decls are (only the top classes /// that directly derive from DeclContext are mentioned, not their subclasses): diff --git a/clang/include/clang/AST/DeclOpenMP.h b/clang/include/clang/AST/DeclOpenMP.h index dd63a4f5d680c..2bbd159f59a35 100644 --- a/clang/include/clang/AST/DeclOpenMP.h +++ b/clang/include/clang/AST/DeclOpenMP.h @@ -171,14 +171,7 @@ class OMPThreadPrivateDecl final : public OMPDeclarativeDirective { class OMPDeclareReductionDecl final : public ValueDecl, public DeclContext { // This class stores some data in DeclContext::OMPDeclareReductionDeclBits // to save some space. Use the provided accessors to access it. -public: - enum InitKind { - CallInit, // Initialized by function call. - DirectInit, // omp_priv() - CopyInit // omp_priv = - }; -private: friend class ASTDeclReader; /// Combiner for declare reduction construct. Expr *Combiner = nullptr; @@ -239,8 +232,9 @@ class OMPDeclareReductionDecl final : public ValueDecl, public DeclContext { Expr *getInitializer() { return Initializer; } const Expr *getInitializer() const { return Initializer; } /// Get initializer kind. - InitKind getInitializerKind() const { - return static_cast(OMPDeclareReductionDeclBits.InitializerKind); + OMPDeclareReductionInitKind getInitializerKind() const { + return static_cast( + OMPDeclareReductionDeclBits.InitializerKind); } /// Get Orig variable of the initializer. Expr *getInitOrig() { return Orig; } @@ -249,9 +243,9 @@ class OMPDeclareReductionDecl final : public ValueDecl, public DeclContext { Expr *getInitPriv() { return Priv; } const Expr *getInitPriv() const { return Priv; } /// Set initializer expression for the declare reduction construct. - void setInitializer(Expr *E, InitKind IK) { + void setInitializer(Expr *E, OMPDeclareReductionInitKind IK) { Initializer = E; - OMPDeclareReductionDeclBits.InitializerKind = IK; + OMPDeclareReductionDeclBits.InitializerKind = llvm::to_underlying(IK); } /// Set initializer Orig and Priv vars. void setInitializerData(Expr *OrigE, Expr *PrivE) { diff --git a/clang/lib/AST/DeclOpenMP.cpp b/clang/lib/AST/DeclOpenMP.cpp index e29fc564fd34a..ac5780f82dbbb 100644 --- a/clang/lib/AST/DeclOpenMP.cpp +++ b/clang/lib/AST/DeclOpenMP.cpp @@ -104,7 +104,7 @@ OMPDeclareReductionDecl::OMPDeclareReductionDecl( QualType Ty, OMPDeclareReductionDecl *PrevDeclInScope) : ValueDecl(DK, DC, L, Name, Ty), DeclContext(DK), Combiner(nullptr), PrevDeclInScope(PrevDeclInScope) { - setInitializer(nullptr, CallInit); + setInitializer(nullptr, OMPDeclareReductionInitKind::Call); } void OMPDeclareReductionDecl::anchor() {} diff --git a/clang/lib/AST/DeclPrinter.cpp b/clang/lib/AST/DeclPrinter.cpp index daa219b43c4e6..98fba958064a1 100644 --- a/clang/lib/AST/DeclPrinter.cpp +++ b/clang/lib/AST/DeclPrinter.cpp @@ -1866,17 +1866,17 @@ void DeclPrinter::VisitOMPDeclareReductionDecl(OMPDeclareReductionDecl *D) { if (auto *Init = D->getInitializer()) { Out << " initializer("; switch (D->getInitializerKind()) { - case OMPDeclareReductionDecl::DirectInit: + case OMPDeclareReductionInitKind::Direct: Out << "omp_priv("; break; - case OMPDeclareReductionDecl::CopyInit: + case OMPDeclareReductionInitKind::Copy: Out << "omp_priv = "; break; - case OMPDeclareReductionDecl::CallInit: + case OMPDeclareReductionInitKind::Call: break; } Init->printPretty(Out, nullptr, Policy, 0, "\n", &Context); - if (D->getInitializerKind() == OMPDeclareReductionDecl::DirectInit) + if (D->getInitializerKind() == OMPDeclareReductionInitKind::Direct) Out << ")"; Out << ")"; } diff --git a/clang/lib/AST/TextNodeDumper.cpp b/clang/lib/AST/TextNodeDumper.cpp index 89951b384f128..bbdfd4523c820 100644 --- a/clang/lib/AST/TextNodeDumper.cpp +++ b/clang/lib/AST/TextNodeDumper.cpp @@ -2078,13 +2078,13 @@ void TextNodeDumper::VisitOMPDeclareReductionDecl( OS << " initializer"; dumpPointer(Initializer); switch (D->getInitializerKind()) { - case OMPDeclareReductionDecl::DirectInit: + case OMPDeclareReductionInitKind::Direct: OS << " omp_priv = "; break; - case OMPDeclareReductionDecl::CopyInit: + case OMPDeclareReductionInitKind::Copy: OS << " omp_priv ()"; break; - case OMPDeclareReductionDecl::CallInit: + case OMPDeclareReductionInitKind::Call: break; } } diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp index 01786774aad6b..34c9c02884ec5 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -1133,7 +1133,7 @@ void CGOpenMPRuntime::emitUserDefinedReduction( if (const Expr *Init = D->getInitializer()) { Initializer = emitCombinerOrInitializer( CGM, D->getType(), - D->getInitializerKind() == OMPDeclareReductionDecl::CallInit ? Init + D->getInitializerKind() == OMPDeclareReductionInitKind::Call ? Init : nullptr, cast(cast(D->getInitOrig())->getDecl()), cast(cast(D->getInitPriv())->getDecl()), diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index 29b2c7531f4b5..1bd34f73e5f7e 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -22611,12 +22611,12 @@ void Sema::ActOnOpenMPDeclareReductionInitializerEnd(Decl *D, Expr *Initializer, PopFunctionScopeInfo(); if (Initializer != nullptr) { - DRD->setInitializer(Initializer, OMPDeclareReductionDecl::CallInit); + DRD->setInitializer(Initializer, OMPDeclareReductionInitKind::Call); } else if (OmpPrivParm->hasInit()) { DRD->setInitializer(OmpPrivParm->getInit(), OmpPrivParm->isDirectInit() - ? OMPDeclareReductionDecl::DirectInit - : OMPDeclareReductionDecl::CopyInit); + ? OMPDeclareReductionInitKind::Direct + : OMPDeclareReductionInitKind::Copy); } else { DRD->setInvalidDecl(); } diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index 78a7892a35a32..11d4c83dba77d 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -3627,7 +3627,7 @@ Decl *TemplateDeclInstantiator::VisitOMPDeclareReductionDecl( SemaRef.CurrentInstantiationScope->InstantiatedLocal( cast(D->getInitPriv())->getDecl(), cast(NewDRD->getInitPriv())->getDecl()); - if (D->getInitializerKind() == OMPDeclareReductionDecl::CallInit) { + if (D->getInitializerKind() == OMPDeclareReductionInitKind::Call) { SubstInitializer = SemaRef.SubstExpr(Init, TemplateArgs).get(); } else { auto *OldPrivParm = @@ -3642,9 +3642,9 @@ Decl *TemplateDeclInstantiator::VisitOMPDeclareReductionDecl( } IsCorrect = IsCorrect && SubstCombiner && (!Init || - (D->getInitializerKind() == OMPDeclareReductionDecl::CallInit && + (D->getInitializerKind() == OMPDeclareReductionInitKind::Call && SubstInitializer) || - (D->getInitializerKind() != OMPDeclareReductionDecl::CallInit && + (D->getInitializerKind() != OMPDeclareReductionInitKind::Call && !SubstInitializer)); (void)SemaRef.ActOnOpenMPDeclareReductionDirectiveEnd( diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 470a648098e2e..94a678e0c4164 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -3005,7 +3005,7 @@ void ASTDeclReader::VisitOMPDeclareReductionDecl(OMPDeclareReductionDecl *D) { Expr *Priv = Record.readExpr(); D->setInitializerData(Orig, Priv); Expr *Init = Record.readExpr(); - auto IK = static_cast(Record.readInt()); + auto IK = static_cast(Record.readInt()); D->setInitializer(Init, IK); D->PrevDeclInScope = readDeclID(); } diff --git a/clang/lib/Serialization/ASTWriterDecl.cpp b/clang/lib/Serialization/ASTWriterDecl.cpp index 7f6a23cf6b8c1..a91fde561d23a 100644 --- a/clang/lib/Serialization/ASTWriterDecl.cpp +++ b/clang/lib/Serialization/ASTWriterDecl.cpp @@ -1972,7 +1972,7 @@ void ASTDeclWriter::VisitOMPDeclareReductionDecl(OMPDeclareReductionDecl *D) { Record.AddStmt(D->getInitOrig()); Record.AddStmt(D->getInitPriv()); Record.AddStmt(D->getInitializer()); - Record.push_back(D->getInitializerKind()); + Record.push_back(llvm::to_underlying(D->getInitializerKind())); Record.AddDeclRef(D->getPrevDeclInScope()); Code = serialization::DECL_OMP_DECLARE_REDUCTION; }