diff options
| author | Julie Hockett <juliehockett@google.com> | 2018-02-07 00:33:50 +0000 |
|---|---|---|
| committer | Julie Hockett <juliehockett@google.com> | 2018-02-07 00:33:50 +0000 |
| commit | 7a76ada901ca81fa384d147eba1d8bab810da463 (patch) | |
| tree | e585ae529019f6ac4e3f33c59ac6f6999513945c | |
| parent | a18b3bcf51870e177586d70b02565d4ca13ab83a (diff) | |
| download | bcm5719-llvm-7a76ada901ca81fa384d147eba1d8bab810da463.tar.gz bcm5719-llvm-7a76ada901ca81fa384d147eba1d8bab810da463.zip | |
[clang-tidy] Update fuchsia-multiple-inheritance to check for templates
Updating fuchsia-multiple-inheritance to not crash when a record
inherits a template.
Fixes PR36052.
Differential Revision: https://reviews.llvm.org/D42918
llvm-svn: 324432
| -rw-r--r-- | clang-tools-extra/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp | 4 | ||||
| -rw-r--r-- | clang-tools-extra/test/clang-tidy/fuchsia-multiple-inheritance.cpp | 2 |
2 files changed, 4 insertions, 2 deletions
diff --git a/clang-tools-extra/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp b/clang-tools-extra/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp index c5632a7301e..f0cc31fd50b 100644 --- a/clang-tools-extra/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp +++ b/clang-tools-extra/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp @@ -64,7 +64,7 @@ bool MultipleInheritanceCheck::isInterface(const CXXRecordDecl *Node) { // To be an interface, all base classes must be interfaces as well. for (const auto &I : Node->bases()) { - if (I.isVirtual()) continue; + if (I.isVirtual()) continue; const auto *Ty = I.getType()->getAs<RecordType>(); assert(Ty && "RecordType of base class is unknown"); const RecordDecl *D = Ty->getDecl()->getDefinition(); @@ -96,7 +96,7 @@ void MultipleInheritanceCheck::check(const MatchFinder::MatchResult &Result) { // concrete classes unsigned NumConcrete = 0; for (const auto &I : D->bases()) { - if (I.isVirtual()) continue; + if (I.isVirtual() || I.getType()->getAs<TemplateTypeParmType>()) continue; const auto *Ty = I.getType()->getAs<RecordType>(); assert(Ty && "RecordType of base class is unknown"); const auto *Base = cast<CXXRecordDecl>(Ty->getDecl()->getDefinition()); diff --git a/clang-tools-extra/test/clang-tidy/fuchsia-multiple-inheritance.cpp b/clang-tools-extra/test/clang-tidy/fuchsia-multiple-inheritance.cpp index 77a37e7a986..31eacdcf57b 100644 --- a/clang-tools-extra/test/clang-tidy/fuchsia-multiple-inheritance.cpp +++ b/clang-tools-extra/test/clang-tidy/fuchsia-multiple-inheritance.cpp @@ -129,3 +129,5 @@ struct V13 : virtual Static_Base_2 { static void f(); }; struct V14 : virtual Static_Base_2 { static void g(); }; struct D8 : V13, V14 {}; +template<typename T> struct A : T {}; +template<typename T> struct B : virtual T {}; |

