From d549e3a23cc42964cbcdce00d322ab0bedf4877d Mon Sep 17 00:00:00 2001 From: Malcolm Parsons Date: Thu, 17 Nov 2016 11:40:02 +0000 Subject: [PATCH] [clang-tidy] Ignore template instantiations in modernize-use-equals-delete check Summary: Template instantiations were causing misplaced fixits. Reviewers: aaron.ballman, alexfh, hokein Subscribers: hokein, cfe-commits Differential Revision: https://reviews.llvm.org/D26751 llvm-svn: 287221 --- .../clang-tidy/modernize/UseEqualsDeleteCheck.cpp | 1 + .../clang-tidy/modernize-use-equals-delete.cpp | 26 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/clang-tools-extra/clang-tidy/modernize/UseEqualsDeleteCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseEqualsDeleteCheck.cpp index 3500398..0ac0801 100644 --- a/clang-tools-extra/clang-tidy/modernize/UseEqualsDeleteCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/UseEqualsDeleteCheck.cpp @@ -34,6 +34,7 @@ void UseEqualsDeleteCheck::registerMatchers(MatchFinder *Finder) { cxxMethodDecl( PrivateSpecialFn, unless(anyOf(hasBody(stmt()), isDefaulted(), isDeleted(), + ast_matchers::isTemplateInstantiation(), // Ensure that all methods except private special member // functions are defined. hasParent(cxxRecordDecl(hasMethod(unless( diff --git a/clang-tools-extra/test/clang-tidy/modernize-use-equals-delete.cpp b/clang-tools-extra/test/clang-tidy/modernize-use-equals-delete.cpp index f6cc310..33a0f72 100644 --- a/clang-tools-extra/test/clang-tidy/modernize-use-equals-delete.cpp +++ b/clang-tools-extra/test/clang-tidy/modernize-use-equals-delete.cpp @@ -22,6 +22,32 @@ private: // CHECK-FIXES: ~PositivePrivate() = delete; }; +template +struct PositivePrivateTemplate { +private: + PositivePrivateTemplate(); + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= delete' to prohibit calling of a special member function [modernize-use-equals-delete] + // CHECK-FIXES: PositivePrivateTemplate() = delete; + PositivePrivateTemplate(const PositivePrivateTemplate &); + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= delete' to prohibit calling of a special member function [modernize-use-equals-delete] + // CHECK-FIXES: PositivePrivateTemplate(const PositivePrivateTemplate &) = delete; + PositivePrivateTemplate &operator=(const PositivePrivateTemplate &); + // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use '= delete' to prohibit calling of a special member function [modernize-use-equals-delete] + // CHECK-FIXES: PositivePrivateTemplate &operator=(const PositivePrivateTemplate &) = delete; + PositivePrivateTemplate(PositivePrivateTemplate &&); + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= delete' to prohibit calling of a special member function [modernize-use-equals-delete] + // CHECK-FIXES: PositivePrivateTemplate(PositivePrivateTemplate &&) = delete; + PositivePrivateTemplate &operator=(PositivePrivateTemplate &&); + // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: use '= delete' to prohibit calling of a special member function [modernize-use-equals-delete] + // CHECK-FIXES: PositivePrivateTemplate &operator=(PositivePrivateTemplate &&) = delete; + ~PositivePrivateTemplate(); + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use '= delete' to prohibit calling of a special member function [modernize-use-equals-delete] + // CHECK-FIXES: ~PositivePrivateTemplate() = delete; +}; + +template struct PositivePrivateTemplate; +template struct PositivePrivateTemplate; + struct NegativePublic { NegativePublic(const NegativePublic &); }; -- 2.7.4