This revision was automatically updated to reflect the committed changes. Closed by commit rG29e4606ced72: [clang-tidy] Skip template ctors in modernize-use-equals-default (authored by alexander-shaposhnikov).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D136797/new/ https://reviews.llvm.org/D136797 Files: clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp clang-tools-extra/docs/ReleaseNotes.rst clang-tools-extra/test/clang-tidy/checkers/modernize/use-equals-default.cpp Index: clang-tools-extra/test/clang-tidy/checkers/modernize/use-equals-default.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/checkers/modernize/use-equals-default.cpp +++ clang-tools-extra/test/clang-tidy/checkers/modernize/use-equals-default.cpp @@ -58,6 +58,18 @@ VA(...) {} }; +// Skip template constructors. +struct TC { + template <unsigned U> + TC() {} + + template <unsigned U> + TC(const TC &) {} + + template <unsigned U> + TC& operator = (const TC &) { return *this; } +}; + // Initializer or arguments. class IA { public: Index: clang-tools-extra/docs/ReleaseNotes.rst =================================================================== --- clang-tools-extra/docs/ReleaseNotes.rst +++ clang-tools-extra/docs/ReleaseNotes.rst @@ -158,9 +158,9 @@ The check now skips unions/union-like classes since in this case a default constructor with empty body is not equivalent to the explicitly defaulted one, variadic constructors since they cannot be explicitly defaulted. The check also skips copy assignment operators - with nonstandard return types, private/protected default constructors for C++17 or earlier. - The automatic fixit has been adjusted to avoid adding superfluous semicolon. - The check is restricted to C++11 or later. + with nonstandard return types, template constructors, private/protected default constructors + for C++17 or earlier. The automatic fixit has been adjusted to avoid adding superfluous + semicolon. The check is restricted to C++11 or later. - Change the default behavior of :doc:`readability-avoid-const-params-in-decls <clang-tidy/checks/readability/avoid-const-params-in-decls>` to not Index: clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp +++ clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp @@ -241,7 +241,9 @@ this); Finder->addMatcher( cxxConstructorDecl( - unless(hasParent(IsUnionLikeClass)), isDefinition(), + unless( + hasParent(decl(anyOf(IsUnionLikeClass, functionTemplateDecl())))), + isDefinition(), anyOf( // Default constructor. allOf(unless(hasAnyConstructorInitializer(isWritten())), @@ -257,8 +259,9 @@ this); // Copy-assignment operator. Finder->addMatcher( - cxxMethodDecl(unless(hasParent(IsUnionLikeClass)), isDefinition(), - isCopyAssignmentOperator(), + cxxMethodDecl(unless(hasParent( + decl(anyOf(IsUnionLikeClass, functionTemplateDecl())))), + isDefinition(), isCopyAssignmentOperator(), // isCopyAssignmentOperator() allows the parameter to be // passed by value, and in this case it cannot be // defaulted.
Index: clang-tools-extra/test/clang-tidy/checkers/modernize/use-equals-default.cpp =================================================================== --- clang-tools-extra/test/clang-tidy/checkers/modernize/use-equals-default.cpp +++ clang-tools-extra/test/clang-tidy/checkers/modernize/use-equals-default.cpp @@ -58,6 +58,18 @@ VA(...) {} }; +// Skip template constructors. +struct TC { + template <unsigned U> + TC() {} + + template <unsigned U> + TC(const TC &) {} + + template <unsigned U> + TC& operator = (const TC &) { return *this; } +}; + // Initializer or arguments. class IA { public: Index: clang-tools-extra/docs/ReleaseNotes.rst =================================================================== --- clang-tools-extra/docs/ReleaseNotes.rst +++ clang-tools-extra/docs/ReleaseNotes.rst @@ -158,9 +158,9 @@ The check now skips unions/union-like classes since in this case a default constructor with empty body is not equivalent to the explicitly defaulted one, variadic constructors since they cannot be explicitly defaulted. The check also skips copy assignment operators - with nonstandard return types, private/protected default constructors for C++17 or earlier. - The automatic fixit has been adjusted to avoid adding superfluous semicolon. - The check is restricted to C++11 or later. + with nonstandard return types, template constructors, private/protected default constructors + for C++17 or earlier. The automatic fixit has been adjusted to avoid adding superfluous + semicolon. The check is restricted to C++11 or later. - Change the default behavior of :doc:`readability-avoid-const-params-in-decls <clang-tidy/checks/readability/avoid-const-params-in-decls>` to not Index: clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp +++ clang-tools-extra/clang-tidy/modernize/UseEqualsDefaultCheck.cpp @@ -241,7 +241,9 @@ this); Finder->addMatcher( cxxConstructorDecl( - unless(hasParent(IsUnionLikeClass)), isDefinition(), + unless( + hasParent(decl(anyOf(IsUnionLikeClass, functionTemplateDecl())))), + isDefinition(), anyOf( // Default constructor. allOf(unless(hasAnyConstructorInitializer(isWritten())), @@ -257,8 +259,9 @@ this); // Copy-assignment operator. Finder->addMatcher( - cxxMethodDecl(unless(hasParent(IsUnionLikeClass)), isDefinition(), - isCopyAssignmentOperator(), + cxxMethodDecl(unless(hasParent( + decl(anyOf(IsUnionLikeClass, functionTemplateDecl())))), + isDefinition(), isCopyAssignmentOperator(), // isCopyAssignmentOperator() allows the parameter to be // passed by value, and in this case it cannot be // defaulted.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits