[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:
Mark de Wever 2019-11-07 21:22:03 +01:00
parent 8d8f9c2440
commit 2b943c4687
2 changed files with 13 additions and 4 deletions

View File

@ -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;
}

View File

@ -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