From 2735166156a610df89be4540e53a7b22e903ce28 Mon Sep 17 00:00:00 2001 From: Gabor Horvath Date: Tue, 24 Apr 2018 14:45:58 +0000 Subject: [PATCH] [clang-tidy] Fix PR35468 Differential Revision: https://reviews.llvm.org/D46003 llvm-svn: 330719 --- .../clang-tidy/misc/UnconventionalAssignOperatorCheck.cpp | 6 +++--- .../clang-tidy/misc-unconventional-assign-operator-cxx17.cpp | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 clang-tools-extra/test/clang-tidy/misc-unconventional-assign-operator-cxx17.cpp diff --git a/clang-tools-extra/clang-tidy/misc/UnconventionalAssignOperatorCheck.cpp b/clang-tools-extra/clang-tidy/misc/UnconventionalAssignOperatorCheck.cpp index cde631e..0fd7e77 100644 --- a/clang-tools-extra/clang-tidy/misc/UnconventionalAssignOperatorCheck.cpp +++ b/clang-tools-extra/clang-tidy/misc/UnconventionalAssignOperatorCheck.cpp @@ -24,9 +24,9 @@ void UnconventionalAssignOperatorCheck::registerMatchers( if (!getLangOpts().CPlusPlus) return; - const auto HasGoodReturnType = cxxMethodDecl(returns( - lValueReferenceType(pointee(unless(isConstQualified()), - hasDeclaration(equalsBoundNode("class")))))); + const auto HasGoodReturnType = cxxMethodDecl(returns(lValueReferenceType( + pointee(unless(isConstQualified()), + anyOf(autoType(), hasDeclaration(equalsBoundNode("class"))))))); const auto IsSelf = qualType( anyOf(hasDeclaration(equalsBoundNode("class")), diff --git a/clang-tools-extra/test/clang-tidy/misc-unconventional-assign-operator-cxx17.cpp b/clang-tools-extra/test/clang-tidy/misc-unconventional-assign-operator-cxx17.cpp new file mode 100644 index 0000000..ba1a685 --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/misc-unconventional-assign-operator-cxx17.cpp @@ -0,0 +1,12 @@ +// RUN: %check_clang_tidy %s misc-unconventional-assign-operator %t -- -- -std=c++17 -fno-delayed-template-parsing + +struct BadModifier { + BadModifier& operator=(const BadModifier&) const; + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: operator=() should not be marked 'const' +}; + +struct PR35468 { + template auto &operator=(const T &) { + return *this; + } +}; -- 2.7.4