Index: clang-tools-extra/trunk/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp =================================================================== --- clang-tools-extra/trunk/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp +++ clang-tools-extra/trunk/clang-tidy/fuchsia/MultipleInheritanceCheck.cpp @@ -30,6 +30,7 @@ // previously. void MultipleInheritanceCheck::addNodeToInterfaceMap(const CXXRecordDecl *Node, bool isInterface) { + assert(Node->getIdentifier()); StringRef Name = Node->getIdentifier()->getName(); InterfaceMap.insert(std::make_pair(Name, isInterface)); } @@ -39,6 +40,7 @@ // interface status for the current node is not yet known. bool MultipleInheritanceCheck::getInterfaceStatus(const CXXRecordDecl *Node, bool &isInterface) const { + assert(Node->getIdentifier()); StringRef Name = Node->getIdentifier()->getName(); llvm::StringMapConstIterator Pair = InterfaceMap.find(Name); if (Pair == InterfaceMap.end()) @@ -59,6 +61,9 @@ } bool MultipleInheritanceCheck::isInterface(const CXXRecordDecl *Node) { + if (!Node->getIdentifier()) + return false; + // Short circuit the lookup if we have analyzed this record before. bool PreviousIsInterfaceResult; if (getInterfaceStatus(Node, PreviousIsInterfaceResult)) Index: clang-tools-extra/trunk/test/clang-tidy/fuchsia-multiple-inheritance.cpp =================================================================== --- clang-tools-extra/trunk/test/clang-tidy/fuchsia-multiple-inheritance.cpp +++ clang-tools-extra/trunk/test/clang-tidy/fuchsia-multiple-inheritance.cpp @@ -134,3 +134,14 @@ template struct C {}; template struct D : C {}; + +// Check clang_tidy does not crash on this code. +template +struct WithTemplBase : T { + WithTemplBase(); +}; + +int test_no_crash() { + auto foo = []() {}; + WithTemplBase(); +}