[PATCH] D69388: [clang-tidy] Fix modernize-use-nodiscard check for classes marked as [[nodiscard]]
Eugene Sedykh via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 24 08:36:01 PDT 2019
sedykh.eugene created this revision.
sedykh.eugene added reviewers: MyDeveloperDay, JonasToth.
sedykh.eugene added a project: clang-tools-extra.
Herald added subscribers: cfe-commits, mgehre, xazax.hun.
Herald added a project: clang.
Current implementation suggests to add [[nodiscard]] to methods even if the return type is marked already as [[nodiscard]]:
Try this:
struct [[nodiscard]] S{};
class C{
S method() const; --> suggests adding [[nodiscard]]
};
This small diff fixes this incorrect behaviour.
This is my first timid try to contribute to open source, so please help me with this piece of code. Maybe there are better ways.
Repository:
rCTE Clang Tools Extra
https://reviews.llvm.org/D69388
Files:
clang-tidy/modernize/UseNodiscardCheck.cpp
test/clang-tidy/checkers/modernize-use-nodiscard.cpp
Index: test/clang-tidy/checkers/modernize-use-nodiscard.cpp
===================================================================
--- test/clang-tidy/checkers/modernize-use-nodiscard.cpp
+++ test/clang-tidy/checkers/modernize-use-nodiscard.cpp
@@ -23,6 +23,8 @@
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 @@
// 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.
Index: clang-tidy/modernize/UseNodiscardCheck.cpp
===================================================================
--- clang-tidy/modernize/UseNodiscardCheck.cpp
+++ clang-tidy/modernize/UseNodiscardCheck.cpp
@@ -94,16 +94,20 @@
auto FunctionObj =
cxxRecordDecl(hasAnyName("::std::function", "::boost::function"));
+ using clang::attr::WarnUnusedResult;
+
// Find all non-void const methods which have not already been marked to
// warn on unused result.
Finder->addMatcher(
cxxMethodDecl(
allOf(isConst(), isDefinitionOrInline(),
unless(anyOf(
- returns(voidType()), isNoReturn(), isOverloadedOperator(),
+ returns(voidType()),
+ returns(hasDeclaration(decl(hasAttr(WarnUnusedResult)))),
+ isNoReturn(), isOverloadedOperator(),
isVariadic(), hasTemplateReturnType(),
hasClassMutableFields(), isConversionOperator(),
- hasAttr(clang::attr::WarnUnusedResult),
+ hasAttr(WarnUnusedResult),
hasType(isInstantiationDependentType()),
hasAnyParameter(anyOf(
parmVarDecl(anyOf(hasType(FunctionObj),
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D69388.226260.patch
Type: text/x-patch
Size: 2042 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20191024/aa84cb54/attachment.bin>
More information about the cfe-commits
mailing list