Author: Balázs Kéri Date: 2020-02-19T10:07:34+01:00 New Revision: fa6aef44277230adecb541c78a71978172accd5c
URL: https://github.com/llvm/llvm-project/commit/fa6aef44277230adecb541c78a71978172accd5c DIFF: https://github.com/llvm/llvm-project/commit/fa6aef44277230adecb541c78a71978172accd5c.diff LOG: [clang-tidy] Added a case to UnconventionalAssignOperatorCheck. Summary: The check accepts now a `return (*this = something);` as return statement too (beneath of `*this`). Reviewers: alexfh, hokein, aaron.ballman, JonasToth Reviewed By: aaron.ballman Subscribers: xazax.hun, dkrupp, Szelethus, gamesh411, cfe-commits Tags: #clang, #clang-tools-extra Differential Revision: https://reviews.llvm.org/D74529 Added: Modified: clang-tools-extra/clang-tidy/misc/UnconventionalAssignOperatorCheck.cpp clang-tools-extra/test/clang-tidy/checkers/misc-unconventional-assign-operator.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/misc/UnconventionalAssignOperatorCheck.cpp b/clang-tools-extra/clang-tidy/misc/UnconventionalAssignOperatorCheck.cpp index 8c87dae90080..811b55bd12be 100644 --- a/clang-tools-extra/clang-tidy/misc/UnconventionalAssignOperatorCheck.cpp +++ b/clang-tools-extra/clang-tidy/misc/UnconventionalAssignOperatorCheck.cpp @@ -60,7 +60,12 @@ void UnconventionalAssignOperatorCheck::registerMatchers( anyOf(unaryOperator(hasOperatorName("*"), hasUnaryOperand(cxxThisExpr())), cxxOperatorCallExpr(argumentCountIs(1), callee(unresolvedLookupExpr()), - hasArgument(0, cxxThisExpr()))))))); + hasArgument(0, cxxThisExpr())), + cxxOperatorCallExpr( + hasOverloadedOperatorName("="), + hasArgument( + 0, unaryOperator(hasOperatorName("*"), + hasUnaryOperand(cxxThisExpr()))))))))); const auto IsGoodAssign = cxxMethodDecl(IsAssign, HasGoodReturnType); Finder->addMatcher(returnStmt(IsBadReturnStatement, forFunction(IsGoodAssign)) diff --git a/clang-tools-extra/test/clang-tidy/checkers/misc-unconventional-assign-operator.cpp b/clang-tools-extra/test/clang-tidy/checkers/misc-unconventional-assign-operator.cpp index a0a37c0ff1c7..4f0713a01f6f 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/misc-unconventional-assign-operator.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/misc-unconventional-assign-operator.cpp @@ -109,3 +109,21 @@ struct Template { Template<int> TemplateInt; } + +struct AssignmentCallAtReturn { + AssignmentCallAtReturn &returnThis() { + return *this; + } + AssignmentCallAtReturn &operator=(int rhs) { + return *this; + } + AssignmentCallAtReturn &operator=(char rhs) { + // Allow call to assignment from other type. + return (*this = static_cast<int>(rhs)); + } + AssignmentCallAtReturn &operator=(float rhs) { + // Do not allow calls to other functions. + return returnThis(); + // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: operator=() should always return '*this' + } +}; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits