Commit 7c18c2f7 authored by Saar Raz's avatar Saar Raz
Browse files

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

[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.

(cherry picked from commit 865456d5)
parent edcd83a6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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();
    }
+12 −0
Original line number Diff line number Diff line
@@ -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));
 No newline at end of file