From: Aaron Ballman Date: Wed, 30 Oct 2019 17:44:18 +0000 (-0400) Subject: Fix modernize-use-nodiscard for classes marked [[nodiscard]] X-Git-Tag: llvmorg-11-init~5471 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=661d2ce619e05dc47a9a232333c01dcba445cd13;p=platform%2Fupstream%2Fllvm.git 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. --- diff --git a/clang-tools-extra/clang-tidy/modernize/UseNodiscardCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseNodiscardCheck.cpp index d2ac7d5..f9d72f5 100644 --- a/clang-tools-extra/clang-tidy/modernize/UseNodiscardCheck.cpp +++ b/clang-tools-extra/clang-tidy/modernize/UseNodiscardCheck.cpp @@ -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), diff --git a/clang-tools-extra/test/clang-tidy/checkers/modernize-use-nodiscard.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize-use-nodiscard.cpp index a571f09..7340713 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/modernize-use-nodiscard.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/modernize-use-nodiscard.cpp @@ -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.