Author: malcolm.parsons Date: Wed Nov 16 03:51:40 2016 New Revision: 287091
URL: http://llvm.org/viewvc/llvm-project?rev=287091&view=rev Log: [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 Modified: clang-tools-extra/trunk/clang-tidy/modernize/UseDefaultCheck.cpp clang-tools-extra/trunk/test/clang-tidy/modernize-use-default.cpp Modified: clang-tools-extra/trunk/clang-tidy/modernize/UseDefaultCheck.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/modernize/UseDefaultCheck.cpp?rev=287091&r1=287090&r2=287091&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/modernize/UseDefaultCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/modernize/UseDefaultCheck.cpp Wed Nov 16 03:51:40 2016 @@ -241,6 +241,7 @@ void UseDefaultCheck::check(const MatchF if (SpecialFunctionDecl->isDeleted() || SpecialFunctionDecl->isExplicitlyDefaulted() || SpecialFunctionDecl->isLateTemplateParsed() || + SpecialFunctionDecl->isTemplateInstantiation() || !SpecialFunctionDecl->isUserProvided() || !SpecialFunctionDecl->hasBody()) return; Modified: clang-tools-extra/trunk/test/clang-tidy/modernize-use-default.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/modernize-use-default.cpp?rev=287091&r1=287090&r2=287091&view=diff ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/modernize-use-default.cpp (original) +++ clang-tools-extra/trunk/test/clang-tidy/modernize-use-default.cpp Wed Nov 16 03:51:40 2016 @@ -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; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits