[Sema] Fixes a crash with a templated destructor
The issue was introduced by D33189 which fixed PR33189. Fixes PR38671: "destructor cannot be declared as a template" leads to segfault in Sema::LookupSpecialMember Differential Revision: https://reviews.llvm.org/D69225
This commit is contained in:
parent
8d8f9c2440
commit
2b943c4687
|
@ -3112,11 +3112,10 @@ Sema::SpecialMemberOverloadResult Sema::LookupSpecialMember(CXXRecordDecl *RD,
|
|||
});
|
||||
}
|
||||
CXXDestructorDecl *DD = RD->getDestructor();
|
||||
assert(DD && "record without a destructor");
|
||||
Result->setMethod(DD);
|
||||
Result->setKind(DD->isDeleted() ?
|
||||
SpecialMemberOverloadResult::NoMemberOrDeleted :
|
||||
SpecialMemberOverloadResult::Success);
|
||||
Result->setKind(DD && !DD->isDeleted()
|
||||
? SpecialMemberOverloadResult::Success
|
||||
: SpecialMemberOverloadResult::NoMemberOrDeleted);
|
||||
return *Result;
|
||||
}
|
||||
|
||||
|
|
|
@ -92,3 +92,13 @@ class PR33189
|
|||
template <class T>
|
||||
~PR33189() { } // expected-error{{destructor cannot be declared as a template}}
|
||||
};
|
||||
|
||||
namespace PR38671 {
|
||||
struct S {
|
||||
template <class>
|
||||
~S(); // expected-error{{destructor cannot be declared as a template}}
|
||||
};
|
||||
struct T : S { // expected-note{{destructor of 'T' is implicitly deleted because base class 'PR38671::S' has no destructor}}
|
||||
~T() = default; // expected-warning{{explicitly defaulted destructor is implicitly deleted}}
|
||||
};
|
||||
} // namespace PR38671
|
||||
|
|
Loading…
Reference in New Issue