Index: clang-tidy/fuchsia/MultipleInheritanceCheck.cpp =================================================================== --- clang-tidy/fuchsia/MultipleInheritanceCheck.cpp +++ clang-tidy/fuchsia/MultipleInheritanceCheck.cpp @@ -66,7 +66,7 @@ for (const auto &I : Node->bases()) { if (I.isVirtual()) continue; const auto *Ty = I.getType()->getAs(); - assert(Ty && "RecordType of base class is unknown"); + if (!Ty) continue; const RecordDecl *D = Ty->getDecl()->getDefinition(); if (!D) continue; const auto *Base = cast(D); @@ -96,9 +96,9 @@ // concrete classes unsigned NumConcrete = 0; for (const auto &I : D->bases()) { - if (I.isVirtual() || I.getType()->getAs()) continue; + if (I.isVirtual()) continue; const auto *Ty = I.getType()->getAs(); - assert(Ty && "RecordType of base class is unknown"); + if (!Ty) continue; const auto *Base = cast(Ty->getDecl()->getDefinition()); if (!isInterface(Base)) NumConcrete++; } @@ -107,7 +107,7 @@ // non-virtual base. for (const auto &V : D->vbases()) { const auto *Ty = V.getType()->getAs(); - assert(Ty && "RecordType of base class is unknown"); + if (!Ty) continue; const auto *Base = cast(Ty->getDecl()->getDefinition()); if (!isInterface(Base)) NumConcrete++; } Index: test/clang-tidy/fuchsia-multiple-inheritance.cpp =================================================================== --- test/clang-tidy/fuchsia-multiple-inheritance.cpp +++ test/clang-tidy/fuchsia-multiple-inheritance.cpp @@ -131,3 +131,6 @@ template struct A : T {}; template struct B : virtual T {}; + +template struct C {}; +template struct D : C {};