Author: juliehockett Date: Tue Feb 13 07:40:40 2018 New Revision: 325015 URL: http://llvm.org/viewvc/llvm-project?rev=325015&view=rev Log: [clang-tidy] Update fuchsia-multiple-inheritance to not fail
Updating the fuchsia-multiple-inheritance to gracefully handle unknown record types (e.g. templatized classes) by simply continuing, rather than asserting and failing. Fixes PR36052. Differential Revision: https://reviews.llvm.org/D43223 Modified: clang-tools-extra/trunk/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp clang-tools-extra/trunk/test/clang-tidy/fuchsia-multiple-inheritance.cpp Modified: clang-tools-extra/trunk/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp?rev=325015&r1=325014&r2=325015&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp Tue Feb 13 07:40:40 2018 @@ -66,7 +66,7 @@ bool MultipleInheritanceCheck::isInterfa 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,9 +96,9 @@ void MultipleInheritanceCheck::check(con // 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++; } @@ -107,7 +107,7 @@ void MultipleInheritanceCheck::check(con // 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++; } Modified: clang-tools-extra/trunk/test/clang-tidy/fuchsia-multiple-inheritance.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/fuchsia-multiple-inheritance.cpp?rev=325015&r1=325014&r2=325015&view=diff ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/fuchsia-multiple-inheritance.cpp (original) +++ clang-tools-extra/trunk/test/clang-tidy/fuchsia-multiple-inheritance.cpp Tue Feb 13 07:40:40 2018 @@ -131,3 +131,6 @@ struct D8 : V13, V14 {}; 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