Skip to content

Commit 630a0ff

Browse files
committed
[clang][NFC] Convert Sema::TrivialABIHandling to scoped enum
1 parent 6f39995 commit 630a0ff

File tree

3 files changed

+28
-28
lines changed

3 files changed

+28
-28
lines changed

clang/include/clang/Sema/Sema.h

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,14 @@ enum class AvailabilityMergeKind {
638638
OptionalProtocolImplementation
639639
};
640640

641+
enum class TrivialABIHandling {
642+
/// The triviality of a method unaffected by "trivial_abi".
643+
IgnoreTrivialABI,
644+
645+
/// The triviality of a method affected by "trivial_abi".
646+
ConsiderTrivialABI
647+
};
648+
641649
/// Sema - This implements semantic analysis and AST building for C.
642650
/// \nosubgrouping
643651
class Sema final : public SemaBase {
@@ -6051,20 +6059,13 @@ class Sema final : public SemaBase {
60516059
void DiagnoseNontrivial(const CXXRecordDecl *Record,
60526060
CXXSpecialMemberKind CSM);
60536061

6054-
enum TrivialABIHandling {
6055-
/// The triviality of a method unaffected by "trivial_abi".
6056-
TAH_IgnoreTrivialABI,
6057-
6058-
/// The triviality of a method affected by "trivial_abi".
6059-
TAH_ConsiderTrivialABI
6060-
};
6061-
60626062
/// Determine whether a defaulted or deleted special member function is
60636063
/// trivial, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,
60646064
/// C++11 [class.copy]p25, and C++11 [class.dtor]p5.
6065-
bool SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMemberKind CSM,
6066-
TrivialABIHandling TAH = TAH_IgnoreTrivialABI,
6067-
bool Diagnose = false);
6065+
bool SpecialMemberIsTrivial(
6066+
CXXMethodDecl *MD, CXXSpecialMemberKind CSM,
6067+
TrivialABIHandling TAH = TrivialABIHandling::IgnoreTrivialABI,
6068+
bool Diagnose = false);
60686069

60696070
/// For a defaulted function, the kind of defaulted function that it is.
60706071
class DefaultedFunctionKind {

clang/lib/Sema/SemaDeclCXX.cpp

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7138,7 +7138,8 @@ void Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {
71387138
Record->finishedDefaultedOrDeletedMember(M);
71397139
M->setTrivialForCall(
71407140
HasTrivialABI ||
7141-
SpecialMemberIsTrivial(M, CSM, TAH_ConsiderTrivialABI));
7141+
SpecialMemberIsTrivial(M, CSM,
7142+
TrivialABIHandling::ConsiderTrivialABI));
71427143
Record->setTrivialForCallFlags(M);
71437144
}
71447145
}
@@ -9997,8 +9998,7 @@ void Sema::DiagnoseDeletedDefaultedFunction(FunctionDecl *FD) {
99979998
/// determine whether the special member is trivial.
99989999
static bool findTrivialSpecialMember(Sema &S, CXXRecordDecl *RD,
999910000
CXXSpecialMemberKind CSM, unsigned Quals,
10000-
bool ConstRHS,
10001-
Sema::TrivialABIHandling TAH,
10001+
bool ConstRHS, TrivialABIHandling TAH,
1000210002
CXXMethodDecl **Selected) {
1000310003
if (Selected)
1000410004
*Selected = nullptr;
@@ -10041,7 +10041,7 @@ static bool findTrivialSpecialMember(Sema &S, CXXRecordDecl *RD,
1004110041
// A destructor is trivial if:
1004210042
// - all the direct [subobjects] have trivial destructors
1004310043
if (RD->hasTrivialDestructor() ||
10044-
(TAH == Sema::TAH_ConsiderTrivialABI &&
10044+
(TAH == TrivialABIHandling::ConsiderTrivialABI &&
1004510045
RD->hasTrivialDestructorForCall()))
1004610046
return true;
1004710047

@@ -10058,7 +10058,7 @@ static bool findTrivialSpecialMember(Sema &S, CXXRecordDecl *RD,
1005810058
// A copy constructor is trivial if:
1005910059
// - the constructor selected to copy each direct [subobject] is trivial
1006010060
if (RD->hasTrivialCopyConstructor() ||
10061-
(TAH == Sema::TAH_ConsiderTrivialABI &&
10061+
(TAH == TrivialABIHandling::ConsiderTrivialABI &&
1006210062
RD->hasTrivialCopyConstructorForCall())) {
1006310063
if (Quals == Qualifiers::Const)
1006410064
// We must either select the trivial copy constructor or reach an
@@ -10113,7 +10113,7 @@ static bool findTrivialSpecialMember(Sema &S, CXXRecordDecl *RD,
1011310113
if (Selected)
1011410114
*Selected = SMOR.getMethod();
1011510115

10116-
if (TAH == Sema::TAH_ConsiderTrivialABI &&
10116+
if (TAH == TrivialABIHandling::ConsiderTrivialABI &&
1011710117
(CSM == CXXSpecialMemberKind::CopyConstructor ||
1011810118
CSM == CXXSpecialMemberKind::MoveConstructor))
1011910119
return SMOR.getMethod()->isTrivialForCall();
@@ -10155,8 +10155,7 @@ static bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc,
1015510155
QualType SubType, bool ConstRHS,
1015610156
CXXSpecialMemberKind CSM,
1015710157
TrivialSubobjectKind Kind,
10158-
Sema::TrivialABIHandling TAH,
10159-
bool Diagnose) {
10158+
TrivialABIHandling TAH, bool Diagnose) {
1016010159
CXXRecordDecl *SubRD = SubType->getAsCXXRecordDecl();
1016110160
if (!SubRD)
1016210161
return true;
@@ -10193,8 +10192,8 @@ static bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc,
1019310192
<< Kind << SubType.getUnqualifiedType() << CSM;
1019410193

1019510194
// Explain why the defaulted or deleted special member isn't trivial.
10196-
S.SpecialMemberIsTrivial(Selected, CSM, Sema::TAH_IgnoreTrivialABI,
10197-
Diagnose);
10195+
S.SpecialMemberIsTrivial(Selected, CSM,
10196+
TrivialABIHandling::IgnoreTrivialABI, Diagnose);
1019810197
}
1019910198
}
1020010199

@@ -10205,8 +10204,7 @@ static bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc,
1020510204
/// trivial.
1020610205
static bool checkTrivialClassMembers(Sema &S, CXXRecordDecl *RD,
1020710206
CXXSpecialMemberKind CSM, bool ConstArg,
10208-
Sema::TrivialABIHandling TAH,
10209-
bool Diagnose) {
10207+
TrivialABIHandling TAH, bool Diagnose) {
1021010208
for (const auto *FI : RD->fields()) {
1021110209
if (FI->isInvalidDecl() || FI->isUnnamedBitField())
1021210210
continue;
@@ -10260,8 +10258,9 @@ void Sema::DiagnoseNontrivial(const CXXRecordDecl *RD,
1026010258
bool ConstArg = (CSM == CXXSpecialMemberKind::CopyConstructor ||
1026110259
CSM == CXXSpecialMemberKind::CopyAssignment);
1026210260
checkTrivialSubobjectCall(*this, RD->getLocation(), Ty, ConstArg, CSM,
10263-
TSK_CompleteObject, TAH_IgnoreTrivialABI,
10264-
/*Diagnose*/true);
10261+
TSK_CompleteObject,
10262+
TrivialABIHandling::IgnoreTrivialABI,
10263+
/*Diagnose*/ true);
1026510264
}
1026610265

1026710266
bool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMemberKind CSM,
@@ -15906,7 +15905,7 @@ CXXConstructorDecl *Sema::DeclareImplicitCopyConstructor(
1590615905
(ClassDecl->needsOverloadResolutionForCopyConstructor()
1590715906
? SpecialMemberIsTrivial(CopyConstructor,
1590815907
CXXSpecialMemberKind::CopyConstructor,
15909-
TAH_ConsiderTrivialABI)
15908+
TrivialABIHandling::ConsiderTrivialABI)
1591015909
: ClassDecl->hasTrivialCopyConstructorForCall()));
1591115910

1591215911
// Note that we have declared this constructor.
@@ -16044,7 +16043,7 @@ CXXConstructorDecl *Sema::DeclareImplicitMoveConstructor(
1604416043
(ClassDecl->needsOverloadResolutionForMoveConstructor()
1604516044
? SpecialMemberIsTrivial(MoveConstructor,
1604616045
CXXSpecialMemberKind::MoveConstructor,
16047-
TAH_ConsiderTrivialABI)
16046+
TrivialABIHandling::ConsiderTrivialABI)
1604816047
: ClassDecl->hasTrivialMoveConstructorForCall()));
1604916048

1605016049
// Note that we have declared this constructor.

clang/lib/Sema/SemaType.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9585,7 +9585,7 @@ bool Sema::RequireLiteralType(SourceLocation Loc, QualType T,
95859585
<< RD;
95869586
if (!Dtor->isUserProvided())
95879587
SpecialMemberIsTrivial(Dtor, CXXSpecialMemberKind::Destructor,
9588-
TAH_IgnoreTrivialABI,
9588+
TrivialABIHandling::IgnoreTrivialABI,
95899589
/*Diagnose*/ true);
95909590
}
95919591
}

0 commit comments

Comments
 (0)