[Concepts] Add null check for TemplateTypeParmType::getDecl() in GetContainedInventedTypeParmVisitor

GetContainedInventedTypeParmVisitor would not account for the case where TemplateTypeParmType::getDecl() is
nullptr, causing bug #45102.

Add the nullptr check.
This commit is contained in:
Saar Raz 2020-03-06 18:45:12 +02:00
parent fb8149cac8
commit 865456d589
2 changed files with 13 additions and 1 deletions

View File

@ -2162,7 +2162,7 @@ namespace {
// The deduced type itself.
TemplateTypeParmDecl *VisitTemplateTypeParmType(
const TemplateTypeParmType *T) {
if (!T->getDecl()->isImplicit())
if (!T->getDecl() || !T->getDecl()->isImplicit())
return nullptr;
return T->getDecl();
}

View File

@ -31,3 +31,15 @@ struct G {
using gf1 = decltype(G<int, char>::foo1('a', 1, 2, 3, 4)); // expected-error{{no matching function}}
using gf2 = decltype(G<int, char>::foo2('a', 1, 2)); // expected-error{{no matching function}}
// Regression (bug #45102): check that instantiation works where there is no
// TemplateTypeParmDecl
template <typename T> using id = T;
template <typename T>
constexpr void g() {
id<void (T)> f;
}
static_assert((g<int>(), true));