Skip to content

Commit 9ef4c81

Browse files
committed
more fixes + cleanup + add missing tests
1 parent d35944b commit 9ef4c81

File tree

2 files changed

+8
-13
lines changed

2 files changed

+8
-13
lines changed

clang/lib/Sema/SemaTypeTraits.cpp

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,26 +1167,20 @@ static bool EvaluateUnaryTypeTrait(Sema &Self, TypeTrait UTT,
11671167
return true;
11681168
if (!(RD->hasTrivialDestructor() && (!Dtor || !Dtor->isDeleted())))
11691169
return false;
1170-
if (RD->hasTrivialDefaultConstructor())
1171-
return true;
1172-
bool FoundCopyCtr = false;
1173-
bool FoundMoveCtr = false;
1174-
bool FoundDefaultCtr = false;
11751170
for (CXXConstructorDecl *Ctr : RD->ctors()) {
11761171
if (Ctr->isIneligibleOrNotSelected() || Ctr->isDeleted())
11771172
continue;
11781173
if (Ctr->isTrivial())
11791174
return true;
1180-
FoundCopyCtr = Ctr->isCopyConstructor();
1181-
FoundMoveCtr = Ctr->isMoveConstructor();
1182-
FoundDefaultCtr = Ctr->isDefaultConstructor();
11831175
}
1184-
if (!FoundDefaultCtr && RD->hasTrivialDefaultConstructor())
1176+
if (RD->needsImplicitDefaultConstructor() &&
1177+
RD->hasTrivialDefaultConstructor() &&
1178+
!RD->hasNonTrivialDefaultConstructor())
11851179
return true;
1186-
if (!FoundCopyCtr && RD->hasTrivialCopyConstructor() &&
1180+
if (RD->needsImplicitCopyConstructor() && RD->hasTrivialCopyConstructor() &&
11871181
!RD->defaultedCopyConstructorIsDeleted())
11881182
return true;
1189-
if (!FoundMoveCtr && RD->hasTrivialMoveConstructor() &&
1183+
if (RD->needsImplicitMoveConstructor() && RD->hasTrivialMoveConstructor() &&
11901184
!RD->defaultedMoveConstructorIsDeleted())
11911185
return true;
11921186
return false;

clang/test/SemaCXX/type-traits.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2067,10 +2067,10 @@ class UserProvidedConstructor {
20672067
UserProvidedConstructor& operator=(const UserProvidedConstructor&) = delete;
20682068
};
20692069
struct Ctr {
2070-
Ctr();
2070+
Ctr();
20712071
};
20722072
struct Ctr2 {
2073-
Ctr2();
2073+
Ctr2();
20742074
private:
20752075
NoEligibleTrivialContructor inner;
20762076
};
@@ -2085,6 +2085,7 @@ class C {
20852085
};
20862086

20872087
static_assert(__builtin_is_implicit_lifetime(Ctr));
2088+
static_assert(!__builtin_is_implicit_lifetime(Ctr2));
20882089
static_assert(__builtin_is_implicit_lifetime(C));
20892090
static_assert(!__builtin_is_implicit_lifetime(NoEligibleTrivialContructor));
20902091
static_assert(__builtin_is_implicit_lifetime(NonAggregate));

0 commit comments

Comments
 (0)