diff --git a/clang-tools-extra/clang-tidy/daedalean/UseNodiscardCheck.cpp b/clang-tools-extra/clang-tidy/daedalean/UseNodiscardCheck.cpp index a7b1c0417e8242..2ab8c9255d21d9 100644 --- a/clang-tools-extra/clang-tidy/daedalean/UseNodiscardCheck.cpp +++ b/clang-tools-extra/clang-tidy/daedalean/UseNodiscardCheck.cpp @@ -25,9 +25,26 @@ namespace { AST_MATCHER(CXXMethodDecl, isOverloadedAssignmentOperator) { // Don't put ``[[nodiscard]]`` in front of assignment operators that return a // reference. - return Node.isOverloadedOperator() && - (Node.getOverloadedOperator() == OverloadedOperatorKind::OO_Equal) && - Node.getReturnType()->isReferenceType(); + if (Node.isOverloadedOperator()) { + switch (Node.getOverloadedOperator()) { + case clang::OverloadedOperatorKind::OO_Equal: + case clang::OverloadedOperatorKind::OO_AmpEqual: + case clang::OverloadedOperatorKind::OO_CaretEqual: + case clang::OverloadedOperatorKind::OO_GreaterEqual: + case clang::OverloadedOperatorKind::OO_MinusEqual: + case clang::OverloadedOperatorKind::OO_PlusEqual: + case clang::OverloadedOperatorKind::OO_PercentEqual: + case clang::OverloadedOperatorKind::OO_PipeEqual: + case clang::OverloadedOperatorKind::OO_SlashEqual: + case clang::OverloadedOperatorKind::OO_StarEqual: + case clang::OverloadedOperatorKind::OO_GreaterGreaterEqual: + case clang::OverloadedOperatorKind::OO_LessLessEqual: + return Node.getReturnType()->isReferenceType(); + default: + return false; + } + } + return false; } AST_MATCHER(CXXMethodDecl, isLambda) { diff --git a/clang-tools-extra/test/clang-tidy/checkers/daedalean-use-nodiscard.cpp b/clang-tools-extra/test/clang-tidy/checkers/daedalean-use-nodiscard.cpp index 8d5d4a89ba4a2a..9ed672326b320f 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/daedalean-use-nodiscard.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/daedalean-use-nodiscard.cpp @@ -356,3 +356,18 @@ template [[nodiscard]] bool callBuiltin() { return __builtin_isinf(0.0) != 0; } + +// Assignemnt operators +class A { + + A &operator=(const A &); + A &operator=(A &&); + A &operator+=(int); + A &operator-=(int); + A &operator*=(int); + A &operator/=(int); + A &operator<<=(int); + A &operator>>=(int); + A &operator|=(int); + A &operator^=(int); +};