[PATCH] D153860: [clang-tidy] Fix modernize-use-std-print check when return value used
Mike Crowe via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 27 09:27:41 PDT 2023
mikecrowe marked an inline comment as done.
mikecrowe added inline comments.
================
Comment at: clang-tools-extra/clang-tidy/modernize/UseStdPrintCheck.cpp:73-95
+static clang::ast_matchers::StatementMatcher
+unusedReturnValue(clang::ast_matchers::StatementMatcher MatchedCallExpr) {
+ auto UnusedInCompoundStmt =
+ compoundStmt(forEach(MatchedCallExpr),
+ // The checker can't currently differentiate between the
+ // return statement and other statements inside GNU statement
+ // expressions, so disable the checker inside them to avoid
----------------
PiotrZSL wrote:
> NOTE: Personally I do not thing that this is right way. Instead of using "inclusion" matcher, better would be to use elimination.
> like:
> ```callExpr(unless(hasParent(anyOf(varDecl(), callExpr(), ifStmt(), ...```.
>
> But if it's working fine, then it could be for now, so lets leave it. Simply with this it may not find all cases.
I'm happy to try doing it a different way. I just took this code from the `bugprone-unused-return-value` check. I had a go at using:
```C++
Finder->addMatcher(
callExpr(unless(hasParent(anyOf(varDecl(), callExpr(), ifStmt(), whileStmt(), doStmt(), forStmt(), cxxForRangeStmt(), switchCase()))), argumentCountAtLeast(1),
```
but there's no overload of `hasParent` that will accept the return type of `anyOf`:
```
/home/mac/git/llvm-project/clang-tools-extra/clang-tidy/modernize/UseStdPrintCheck.cpp:100:23: error: no matching function for call to object of type 'const internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasParentMatcher, internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc, Attr>, internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc, Attr>>'
callExpr(unless(hasParent(anyOf(varDecl(), callExpr(), ifStmt(), whileStmt(), doStmt(), forStmt(), cxxForRangeStmt(), switchCase()))), argumentCountAtLeast(1),
^~~~~~~~~
/home/mac/git/llvm-project/clang/include/clang/ASTMatchers/ASTMatchersInternal.h:1491:3: note: candidate template ignored: could not match 'Matcher' against 'VariadicOperatorMatcher'
operator()(const Matcher<T> &InnerMatcher) const {
^
/home/mac/git/llvm-project/clang/include/clang/ASTMatchers/ASTMatchersInternal.h:1498:3: note: candidate template ignored: could not match 'MapAnyOfHelper' against 'VariadicOperatorMatcher'
operator()(const MapAnyOfHelper<T...> &InnerMatcher) const {
```
(Reducing the set of matchers inside the `anyOf` didn't help.)
================
Comment at: clang-tools-extra/test/clang-tidy/checkers/modernize/use-std-print-absl.cpp:63
+ // CHECK-MESSAGES-NOT: [[@LINE-1]]:10: warning: use 'std::println' instead of 'PrintF' [modernize-use-std-print]
+ // CHECK-FIXES-NOT: std::println("return value {}", i);
+}
----------------
PiotrZSL wrote:
> NOTE: I don't think that those FIXES-NOT are needed.
OK. I'll leave only the ones that are for deficiencies that might one day be fixed.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D153860/new/
https://reviews.llvm.org/D153860
More information about the cfe-commits
mailing list