diff options
author | Artem Dergachev <artem.dergachev@gmail.com> | 2016-08-23 16:42:00 +0000 |
---|---|---|
committer | Artem Dergachev <artem.dergachev@gmail.com> | 2016-08-23 16:42:00 +0000 |
commit | d0e69cf6b21f1ecc3e2a957d9d53c271c7b8b897 (patch) | |
tree | afe13da446538ea9d1dbd457da3a27f3b3bf6f3e /lib/Analysis/CloneDetection.cpp | |
parent | 36fa4bbf3fd298a32efe4d9f921b5308ff68eac6 (diff) |
[analyzer] Fix CloneDetector crash on calling methods of class templates.
If a call expression represents a method call of a class template,
and the method itself isn't templated, then the method may be considered
to be a template instantiation without template specialization arguments.
No longer crash when we could not find template specialization arguments.
Patch by Raphael Isemann!
Differential Revision: https://reviews.llvm.org/D23780
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@279529 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/CloneDetection.cpp')
-rw-r--r-- | lib/Analysis/CloneDetection.cpp | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/lib/Analysis/CloneDetection.cpp b/lib/Analysis/CloneDetection.cpp index 9d11dabf96..a91ccaa4d2 100644 --- a/lib/Analysis/CloneDetection.cpp +++ b/lib/Analysis/CloneDetection.cpp @@ -345,10 +345,9 @@ public: 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 |