Index: cfe/trunk/lib/Analysis/CloneDetection.cpp =================================================================== --- cfe/trunk/lib/Analysis/CloneDetection.cpp +++ cfe/trunk/lib/Analysis/CloneDetection.cpp @@ -345,10 +345,9 @@ DEF_ADD_DATA(CallExpr, { // Function pointers don't have a callee and we just skip hashing it. if (const FunctionDecl *D = S->getDirectCallee()) { - // If the function is a template instantiation, we also need to handle - // the template arguments as they are no included in the qualified name. - if (D->isTemplateInstantiation()) { - auto Args = D->getTemplateSpecializationArgs(); + // If the function is a template specialization, we also need to handle + // the template arguments as they are not included in the qualified name. + if (auto Args = D->getTemplateSpecializationArgs()) { std::string ArgString; // Print all template arguments into ArgString Index: cfe/trunk/test/Analysis/copypaste/call.cpp =================================================================== --- cfe/trunk/test/Analysis/copypaste/call.cpp +++ cfe/trunk/test/Analysis/copypaste/call.cpp @@ -88,3 +88,15 @@ return templatePaddingFunc(); return true; } + +// Test that we don't crash on member functions of template instantiations. + +template +struct A { + void foo(T t) {} +}; + +void fooTestInstantiation() { + A a; + a.foo(1); +}