This revision was automatically updated to reflect the committed changes. Closed by commit rCTE325015: [clang-tidy] Update fuchsia-multiple-inheritance to not fail (authored by juliehockett, committed by ).
Repository: rCTE Clang Tools Extra https://reviews.llvm.org/D43223 Files: clang-tidy/fuchsia/MultipleInheritanceCheck.cpp test/clang-tidy/fuchsia-multiple-inheritance.cpp 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<RecordType>(); - assert(Ty && "RecordType of base class is unknown"); + if (!Ty) continue; const RecordDecl *D = Ty->getDecl()->getDefinition(); if (!D) continue; const auto *Base = cast<CXXRecordDecl>(D); @@ -96,18 +96,18 @@ // concrete classes unsigned NumConcrete = 0; for (const auto &I : D->bases()) { - if (I.isVirtual() || I.getType()->getAs<TemplateTypeParmType>()) continue; + if (I.isVirtual()) continue; const auto *Ty = I.getType()->getAs<RecordType>(); - assert(Ty && "RecordType of base class is unknown"); + if (!Ty) continue; const auto *Base = cast<CXXRecordDecl>(Ty->getDecl()->getDefinition()); if (!isInterface(Base)) NumConcrete++; } // Check virtual bases to see if there is more than one concrete // non-virtual base. for (const auto &V : D->vbases()) { const auto *Ty = V.getType()->getAs<RecordType>(); - assert(Ty && "RecordType of base class is unknown"); + if (!Ty) continue; const auto *Base = cast<CXXRecordDecl>(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<typename T> struct A : T {}; template<typename T> struct B : virtual T {}; + +template<typename> struct C {}; +template<typename T> struct D : C<T> {};
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<RecordType>(); - assert(Ty && "RecordType of base class is unknown"); + if (!Ty) continue; const RecordDecl *D = Ty->getDecl()->getDefinition(); if (!D) continue; const auto *Base = cast<CXXRecordDecl>(D); @@ -96,18 +96,18 @@ // concrete classes unsigned NumConcrete = 0; for (const auto &I : D->bases()) { - if (I.isVirtual() || I.getType()->getAs<TemplateTypeParmType>()) continue; + if (I.isVirtual()) continue; const auto *Ty = I.getType()->getAs<RecordType>(); - assert(Ty && "RecordType of base class is unknown"); + if (!Ty) continue; const auto *Base = cast<CXXRecordDecl>(Ty->getDecl()->getDefinition()); if (!isInterface(Base)) NumConcrete++; } // Check virtual bases to see if there is more than one concrete // non-virtual base. for (const auto &V : D->vbases()) { const auto *Ty = V.getType()->getAs<RecordType>(); - assert(Ty && "RecordType of base class is unknown"); + if (!Ty) continue; const auto *Base = cast<CXXRecordDecl>(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<typename T> struct A : T {}; template<typename T> struct B : virtual T {}; + +template<typename> struct C {}; +template<typename T> struct D : C<T> {};
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits