diff --git a/clang-tools-extra/clang-tidy/bugprone/UnusedReturnValueCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/UnusedReturnValueCheck.cpp --- a/clang-tools-extra/clang-tidy/bugprone/UnusedReturnValueCheck.cpp +++ b/clang-tools-extra/clang-tidy/bugprone/UnusedReturnValueCheck.cpp @@ -156,6 +156,15 @@ auto UnusedInRangeForStmt = cxxForRangeStmt(hasBody(MatchedCallExpr)); auto UnusedInCaseStmt = switchCase(forEach(MatchedCallExpr)); + Finder->addMatcher( + callExpr(callee(functionDecl(anyOf( + hasReturnTypeLoc(loc(asString("std::error_code"))), + hasReturnTypeLoc(loc(asString("std::expected"))), + hasReturnTypeLoc(loc(asString("boost::system::error_code"))), + hasReturnTypeLoc(loc(asString("abseil::Status"))))))) + .bind("return-types"), + this); + Finder->addMatcher( stmt(anyOf(UnusedInCompoundStmt, UnusedInIfStmt, UnusedInWhileStmt, UnusedInDoStmt, UnusedInForStmt, UnusedInRangeForStmt, @@ -164,13 +173,17 @@ } void UnusedReturnValueCheck::check(const MatchFinder::MatchResult &Result) { - if (const auto *Matched = Result.Nodes.getNodeAs("match")) { - diag(Matched->getBeginLoc(), - "the value returned by this function should be used") - << Matched->getSourceRange(); - diag(Matched->getBeginLoc(), - "cast the expression to void to silence this warning", - DiagnosticIDs::Note); + const char *callExprBindingNames[] = {"return-types", "match"}; + for (const char *callExprBindingName : callExprBindingNames) { + if (const auto *Matched = + Result.Nodes.getNodeAs(callExprBindingName)) { + diag(Matched->getBeginLoc(), + "the value returned by this function should be used") + << Matched->getSourceRange(); + diag(Matched->getBeginLoc(), + "cast the expression to void to silence this warning", + DiagnosticIDs::Note); + }; } }