diff options
| author | Malcolm Parsons <malcolm.parsons@gmail.com> | 2016-11-16 09:51:40 +0000 |
|---|---|---|
| committer | Malcolm Parsons <malcolm.parsons@gmail.com> | 2016-11-16 09:51:40 +0000 |
| commit | 31055c6aceeaf0f2641ce44ca8b4ca3aa1cc7153 (patch) | |
| tree | 849e5ae823f467d83749810e8ce068601cce94bb | |
| parent | afaa934304858c2abe0a3c3064b325890abe0ef6 (diff) | |
| download | bcm5719-llvm-31055c6aceeaf0f2641ce44ca8b4ca3aa1cc7153.tar.gz bcm5719-llvm-31055c6aceeaf0f2641ce44ca8b4ca3aa1cc7153.zip | |
[clang-tidy] Handle template instantiations in modenize-use-default check
Summary:
Duplicate fixes were being created for explicit template instantiations
of out-of-line constructors or destructors.
Fixes PR30921.
Reviewers: alexfh, aaron.ballman
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D26582
llvm-svn: 287091
| -rw-r--r-- | clang-tools-extra/clang-tidy/modernize/UseDefaultCheck.cpp | 1 | ||||
| -rw-r--r-- | clang-tools-extra/test/clang-tidy/modernize-use-default.cpp | 20 |
2 files changed, 21 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-tidy/modernize/UseDefaultCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseDefaultCheck.cpp index ce497c81ab8..6092ae65e54 100644 --- a/clang-tools-extra/clang-tidy/modernize/UseDefaultCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/UseDefaultCheck.cpp @@ -241,6 +241,7 @@ void UseDefaultCheck::check(const MatchFinder::MatchResult &Result) { if (SpecialFunctionDecl->isDeleted() || SpecialFunctionDecl->isExplicitlyDefaulted() || SpecialFunctionDecl->isLateTemplateParsed() || + SpecialFunctionDecl->isTemplateInstantiation() || !SpecialFunctionDecl->isUserProvided() || !SpecialFunctionDecl->hasBody()) return; diff --git a/clang-tools-extra/test/clang-tidy/modernize-use-default.cpp b/clang-tools-extra/test/clang-tidy/modernize-use-default.cpp index 4119a7072c6..6f6f01fa1c8 100644 --- a/clang-tools-extra/test/clang-tidy/modernize-use-default.cpp +++ b/clang-tools-extra/test/clang-tidy/modernize-use-default.cpp @@ -124,6 +124,26 @@ public: // CHECK-FIXES: ~Temp() = default; }; +// Class template out of line with explicit instantiation. +template <class T> +class TempODef { +public: + TempODef(); + ~TempODef(); +}; + +template <class T> +TempODef<T>::TempODef() {} +// CHECK-MESSAGES: :[[@LINE-2]]:1: warning: use '= default' +// CHECK-FIXES: TempODef<T>::TempODef() = default; +template <class T> +TempODef<T>::~TempODef() {} +// CHECK-MESSAGES: :[[@LINE-2]]:1: warning: use '= default' +// CHECK-FIXES: TempODef<T>::~TempODef() = default; + +template class TempODef<int>; +template class TempODef<double>; + // Non user-provided constructor/destructor. struct Imp { int Int; |

