Author: Vlad Serebrennikov Date: 2025-05-02T09:12:52+03:00 New Revision: 630a0ff2c25c4ced739b1c07633097ccbf182cd6
URL: https://github.com/llvm/llvm-project/commit/630a0ff2c25c4ced739b1c07633097ccbf182cd6 DIFF: https://github.com/llvm/llvm-project/commit/630a0ff2c25c4ced739b1c07633097ccbf182cd6.diff LOG: [clang][NFC] Convert `Sema::TrivialABIHandling` to scoped enum Added: Modified: clang/include/clang/Sema/Sema.h clang/lib/Sema/SemaDeclCXX.cpp clang/lib/Sema/SemaType.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h index 39702f1534e4a..4dc2783b5f83a 100644 --- a/clang/include/clang/Sema/Sema.h +++ b/clang/include/clang/Sema/Sema.h @@ -638,6 +638,14 @@ enum class AvailabilityMergeKind { OptionalProtocolImplementation }; +enum class TrivialABIHandling { + /// The triviality of a method unaffected by "trivial_abi". + IgnoreTrivialABI, + + /// The triviality of a method affected by "trivial_abi". + ConsiderTrivialABI +}; + /// Sema - This implements semantic analysis and AST building for C. /// \nosubgrouping class Sema final : public SemaBase { @@ -6051,20 +6059,13 @@ class Sema final : public SemaBase { void DiagnoseNontrivial(const CXXRecordDecl *Record, CXXSpecialMemberKind CSM); - enum TrivialABIHandling { - /// The triviality of a method unaffected by "trivial_abi". - TAH_IgnoreTrivialABI, - - /// The triviality of a method affected by "trivial_abi". - TAH_ConsiderTrivialABI - }; - /// Determine whether a defaulted or deleted special member function is /// trivial, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12, /// C++11 [class.copy]p25, and C++11 [class.dtor]p5. - bool SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMemberKind CSM, - TrivialABIHandling TAH = TAH_IgnoreTrivialABI, - bool Diagnose = false); + bool SpecialMemberIsTrivial( + CXXMethodDecl *MD, CXXSpecialMemberKind CSM, + TrivialABIHandling TAH = TrivialABIHandling::IgnoreTrivialABI, + bool Diagnose = false); /// For a defaulted function, the kind of defaulted function that it is. class DefaultedFunctionKind { diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index f02fc855d5b3d..3b5deb95531ab 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -7138,7 +7138,8 @@ void Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) { Record->finishedDefaultedOrDeletedMember(M); M->setTrivialForCall( HasTrivialABI || - SpecialMemberIsTrivial(M, CSM, TAH_ConsiderTrivialABI)); + SpecialMemberIsTrivial(M, CSM, + TrivialABIHandling::ConsiderTrivialABI)); Record->setTrivialForCallFlags(M); } } @@ -9997,8 +9998,7 @@ void Sema::DiagnoseDeletedDefaultedFunction(FunctionDecl *FD) { /// determine whether the special member is trivial. static bool findTrivialSpecialMember(Sema &S, CXXRecordDecl *RD, CXXSpecialMemberKind CSM, unsigned Quals, - bool ConstRHS, - Sema::TrivialABIHandling TAH, + bool ConstRHS, TrivialABIHandling TAH, CXXMethodDecl **Selected) { if (Selected) *Selected = nullptr; @@ -10041,7 +10041,7 @@ static bool findTrivialSpecialMember(Sema &S, CXXRecordDecl *RD, // A destructor is trivial if: // - all the direct [subobjects] have trivial destructors if (RD->hasTrivialDestructor() || - (TAH == Sema::TAH_ConsiderTrivialABI && + (TAH == TrivialABIHandling::ConsiderTrivialABI && RD->hasTrivialDestructorForCall())) return true; @@ -10058,7 +10058,7 @@ static bool findTrivialSpecialMember(Sema &S, CXXRecordDecl *RD, // A copy constructor is trivial if: // - the constructor selected to copy each direct [subobject] is trivial if (RD->hasTrivialCopyConstructor() || - (TAH == Sema::TAH_ConsiderTrivialABI && + (TAH == TrivialABIHandling::ConsiderTrivialABI && RD->hasTrivialCopyConstructorForCall())) { if (Quals == Qualifiers::Const) // We must either select the trivial copy constructor or reach an @@ -10113,7 +10113,7 @@ static bool findTrivialSpecialMember(Sema &S, CXXRecordDecl *RD, if (Selected) *Selected = SMOR.getMethod(); - if (TAH == Sema::TAH_ConsiderTrivialABI && + if (TAH == TrivialABIHandling::ConsiderTrivialABI && (CSM == CXXSpecialMemberKind::CopyConstructor || CSM == CXXSpecialMemberKind::MoveConstructor)) return SMOR.getMethod()->isTrivialForCall(); @@ -10155,8 +10155,7 @@ static bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc, QualType SubType, bool ConstRHS, CXXSpecialMemberKind CSM, TrivialSubobjectKind Kind, - Sema::TrivialABIHandling TAH, - bool Diagnose) { + TrivialABIHandling TAH, bool Diagnose) { CXXRecordDecl *SubRD = SubType->getAsCXXRecordDecl(); if (!SubRD) return true; @@ -10193,8 +10192,8 @@ static bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc, << Kind << SubType.getUnqualifiedType() << CSM; // Explain why the defaulted or deleted special member isn't trivial. - S.SpecialMemberIsTrivial(Selected, CSM, Sema::TAH_IgnoreTrivialABI, - Diagnose); + S.SpecialMemberIsTrivial(Selected, CSM, + TrivialABIHandling::IgnoreTrivialABI, Diagnose); } } @@ -10205,8 +10204,7 @@ static bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc, /// trivial. static bool checkTrivialClassMembers(Sema &S, CXXRecordDecl *RD, CXXSpecialMemberKind CSM, bool ConstArg, - Sema::TrivialABIHandling TAH, - bool Diagnose) { + TrivialABIHandling TAH, bool Diagnose) { for (const auto *FI : RD->fields()) { if (FI->isInvalidDecl() || FI->isUnnamedBitField()) continue; @@ -10260,8 +10258,9 @@ void Sema::DiagnoseNontrivial(const CXXRecordDecl *RD, bool ConstArg = (CSM == CXXSpecialMemberKind::CopyConstructor || CSM == CXXSpecialMemberKind::CopyAssignment); checkTrivialSubobjectCall(*this, RD->getLocation(), Ty, ConstArg, CSM, - TSK_CompleteObject, TAH_IgnoreTrivialABI, - /*Diagnose*/true); + TSK_CompleteObject, + TrivialABIHandling::IgnoreTrivialABI, + /*Diagnose*/ true); } bool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMemberKind CSM, @@ -15906,7 +15905,7 @@ CXXConstructorDecl *Sema::DeclareImplicitCopyConstructor( (ClassDecl->needsOverloadResolutionForCopyConstructor() ? SpecialMemberIsTrivial(CopyConstructor, CXXSpecialMemberKind::CopyConstructor, - TAH_ConsiderTrivialABI) + TrivialABIHandling::ConsiderTrivialABI) : ClassDecl->hasTrivialCopyConstructorForCall())); // Note that we have declared this constructor. @@ -16044,7 +16043,7 @@ CXXConstructorDecl *Sema::DeclareImplicitMoveConstructor( (ClassDecl->needsOverloadResolutionForMoveConstructor() ? SpecialMemberIsTrivial(MoveConstructor, CXXSpecialMemberKind::MoveConstructor, - TAH_ConsiderTrivialABI) + TrivialABIHandling::ConsiderTrivialABI) : ClassDecl->hasTrivialMoveConstructorForCall())); // Note that we have declared this constructor. diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index 6406415c371c2..df3afc020ac7a 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -9585,7 +9585,7 @@ bool Sema::RequireLiteralType(SourceLocation Loc, QualType T, << RD; if (!Dtor->isUserProvided()) SpecialMemberIsTrivial(Dtor, CXXSpecialMemberKind::Destructor, - TAH_IgnoreTrivialABI, + TrivialABIHandling::IgnoreTrivialABI, /*Diagnose*/ true); } } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits