@@ -14475,6 +14475,11 @@ CXXMethodDecl *Sema::DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl) {
14475
14475
nullptr);
14476
14476
CopyAssignment->setParams(FromParam);
14477
14477
14478
+ CopyAssignment->setTrivial(
14479
+ ClassDecl->needsOverloadResolutionForCopyAssignment()
14480
+ ? SpecialMemberIsTrivial(CopyAssignment, CXXCopyAssignment)
14481
+ : ClassDecl->hasTrivialCopyAssignment());
14482
+
14478
14483
// Note that we have added this copy-assignment operator.
14479
14484
++getASTContext().NumImplicitCopyAssignmentOperatorsDeclared;
14480
14485
@@ -14484,11 +14489,6 @@ CXXMethodDecl *Sema::DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl) {
14484
14489
if (ShouldDeleteSpecialMember(CopyAssignment, CXXCopyAssignment)) {
14485
14490
ClassDecl->setImplicitCopyAssignmentIsDeleted();
14486
14491
SetDeclDeleted(CopyAssignment, ClassLoc);
14487
- } else {
14488
- CopyAssignment->setTrivial(
14489
- ClassDecl->needsOverloadResolutionForCopyAssignment()
14490
- ? SpecialMemberIsTrivial(CopyAssignment, CXXCopyAssignment)
14491
- : ClassDecl->hasTrivialCopyAssignment());
14492
14492
}
14493
14493
14494
14494
if (S)
@@ -14813,6 +14813,11 @@ CXXMethodDecl *Sema::DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl) {
14813
14813
nullptr);
14814
14814
MoveAssignment->setParams(FromParam);
14815
14815
14816
+ MoveAssignment->setTrivial(
14817
+ ClassDecl->needsOverloadResolutionForMoveAssignment()
14818
+ ? SpecialMemberIsTrivial(MoveAssignment, CXXMoveAssignment)
14819
+ : ClassDecl->hasTrivialMoveAssignment());
14820
+
14816
14821
// Note that we have added this copy-assignment operator.
14817
14822
++getASTContext().NumImplicitMoveAssignmentOperatorsDeclared;
14818
14823
@@ -14822,11 +14827,6 @@ CXXMethodDecl *Sema::DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl) {
14822
14827
if (ShouldDeleteSpecialMember(MoveAssignment, CXXMoveAssignment)) {
14823
14828
ClassDecl->setImplicitMoveAssignmentIsDeleted();
14824
14829
SetDeclDeleted(MoveAssignment, ClassLoc);
14825
- } else {
14826
- MoveAssignment->setTrivial(
14827
- ClassDecl->needsOverloadResolutionForMoveAssignment()
14828
- ? SpecialMemberIsTrivial(MoveAssignment, CXXMoveAssignment)
14829
- : ClassDecl->hasTrivialMoveAssignment());
14830
14830
}
14831
14831
14832
14832
if (S)
@@ -15197,6 +15197,18 @@ CXXConstructorDecl *Sema::DeclareImplicitCopyConstructor(
15197
15197
/*TInfo=*/TSI, SC_None, nullptr);
15198
15198
CopyConstructor->setParams(FromParam);
15199
15199
15200
+ CopyConstructor->setTrivial(
15201
+ ClassDecl->needsOverloadResolutionForCopyConstructor()
15202
+ ? SpecialMemberIsTrivial(CopyConstructor, CXXCopyConstructor)
15203
+ : ClassDecl->hasTrivialCopyConstructor());
15204
+
15205
+ CopyConstructor->setTrivialForCall(
15206
+ ClassDecl->hasAttr<TrivialABIAttr>() ||
15207
+ (ClassDecl->needsOverloadResolutionForCopyConstructor()
15208
+ ? SpecialMemberIsTrivial(CopyConstructor, CXXCopyConstructor,
15209
+ TAH_ConsiderTrivialABI)
15210
+ : ClassDecl->hasTrivialCopyConstructorForCall()));
15211
+
15200
15212
// Note that we have declared this constructor.
15201
15213
++getASTContext().NumImplicitCopyConstructorsDeclared;
15202
15214
@@ -15206,18 +15218,6 @@ CXXConstructorDecl *Sema::DeclareImplicitCopyConstructor(
15206
15218
if (ShouldDeleteSpecialMember(CopyConstructor, CXXCopyConstructor)) {
15207
15219
ClassDecl->setImplicitCopyConstructorIsDeleted();
15208
15220
SetDeclDeleted(CopyConstructor, ClassLoc);
15209
- } else {
15210
- CopyConstructor->setTrivial(
15211
- ClassDecl->needsOverloadResolutionForCopyConstructor()
15212
- ? SpecialMemberIsTrivial(CopyConstructor, CXXCopyConstructor)
15213
- : ClassDecl->hasTrivialCopyConstructor());
15214
-
15215
- CopyConstructor->setTrivialForCall(
15216
- ClassDecl->hasAttr<TrivialABIAttr>() ||
15217
- (ClassDecl->needsOverloadResolutionForCopyConstructor()
15218
- ? SpecialMemberIsTrivial(CopyConstructor, CXXCopyConstructor,
15219
- TAH_ConsiderTrivialABI)
15220
- : ClassDecl->hasTrivialCopyConstructorForCall()));
15221
15221
}
15222
15222
15223
15223
if (S)
@@ -15331,6 +15331,18 @@ CXXConstructorDecl *Sema::DeclareImplicitMoveConstructor(
15331
15331
SC_None, nullptr);
15332
15332
MoveConstructor->setParams(FromParam);
15333
15333
15334
+ MoveConstructor->setTrivial(
15335
+ ClassDecl->needsOverloadResolutionForMoveConstructor()
15336
+ ? SpecialMemberIsTrivial(MoveConstructor, CXXMoveConstructor)
15337
+ : ClassDecl->hasTrivialMoveConstructor());
15338
+
15339
+ MoveConstructor->setTrivialForCall(
15340
+ ClassDecl->hasAttr<TrivialABIAttr>() ||
15341
+ (ClassDecl->needsOverloadResolutionForMoveConstructor()
15342
+ ? SpecialMemberIsTrivial(MoveConstructor, CXXMoveConstructor,
15343
+ TAH_ConsiderTrivialABI)
15344
+ : ClassDecl->hasTrivialMoveConstructorForCall()));
15345
+
15334
15346
// Note that we have declared this constructor.
15335
15347
++getASTContext().NumImplicitMoveConstructorsDeclared;
15336
15348
@@ -15340,18 +15352,6 @@ CXXConstructorDecl *Sema::DeclareImplicitMoveConstructor(
15340
15352
if (ShouldDeleteSpecialMember(MoveConstructor, CXXMoveConstructor)) {
15341
15353
ClassDecl->setImplicitMoveConstructorIsDeleted();
15342
15354
SetDeclDeleted(MoveConstructor, ClassLoc);
15343
- } else {
15344
- MoveConstructor->setTrivial(
15345
- ClassDecl->needsOverloadResolutionForMoveConstructor()
15346
- ? SpecialMemberIsTrivial(MoveConstructor, CXXMoveConstructor)
15347
- : ClassDecl->hasTrivialMoveConstructor());
15348
-
15349
- MoveConstructor->setTrivialForCall(
15350
- ClassDecl->hasAttr<TrivialABIAttr>() ||
15351
- (ClassDecl->needsOverloadResolutionForMoveConstructor()
15352
- ? SpecialMemberIsTrivial(MoveConstructor, CXXMoveConstructor,
15353
- TAH_ConsiderTrivialABI)
15354
- : ClassDecl->hasTrivialMoveConstructorForCall()));
15355
15355
}
15356
15356
15357
15357
if (S)
@@ -17569,9 +17569,6 @@ void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {
17569
17569
// A deleted function is implicitly inline.
17570
17570
Fn->setImplicitlyInline();
17571
17571
Fn->setDeletedAsWritten();
17572
-
17573
- Fn->setTrivial(true);
17574
- Fn->setTrivialForCall(true);
17575
17572
}
17576
17573
17577
17574
void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {
0 commit comments