Commit 661d2ce6 authored by Aaron Ballman's avatar Aaron Ballman
Browse files

Fix modernize-use-nodiscard for classes marked [[nodiscard]]

Current implementation suggests to add [[nodiscard]] to methods even if the
return type is marked already as [[nodiscard]].

Patch by Eugene Sedykh.
parent 5cc605bc
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -100,7 +100,9 @@ void UseNodiscardCheck::registerMatchers(MatchFinder *Finder) {
      cxxMethodDecl(
          allOf(isConst(), isDefinitionOrInline(),
                unless(anyOf(
                    returns(voidType()), isNoReturn(), isOverloadedOperator(),
                    returns(voidType()),
                    returns(hasDeclaration(decl(hasAttr(clang::attr::WarnUnusedResult)))),
                    isNoReturn(), isOverloadedOperator(),
                    isVariadic(), hasTemplateReturnType(),
                    hasClassMutableFields(), isConversionOperator(),
                    hasAttr(clang::attr::WarnUnusedResult),
+5 −0
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ typedef unsigned my_unsigned;
typedef unsigned &my_unsigned_reference;
typedef const unsigned &my_unsigned_const_reference;

struct NO_DISCARD NoDiscardStruct{};

class Foo {
public:
    using size_type = unsigned;
@@ -160,6 +162,9 @@ public:

    // Do not add ``[[nodiscard]]`` to conversion functions.
    // explicit operator bool() const { return true; }

    // Do not add ``[[nodiscard]]`` to functions returning types marked [[nodiscard]].
    NoDiscardStruct f50() const;
};

// Do not add ``[[nodiscard]]`` to Lambda.