[clang-tools-extra] r325015 - [clang-tidy] Update fuchsia-multiple-inheritance to not fail

Julie Hockett via cfe-commits cfe-commits at lists.llvm.org
Tue Feb 13 07:40:41 PST 2018


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> {};




More information about the cfe-commits mailing list