[clang-tools-extra] [clang-tidy] Add fix-its to `avoid-return-with-void-value` check (PR #81420)
Congcong Cai via cfe-commits
cfe-commits at lists.llvm.org
Sun Feb 18 17:19:48 PST 2024
================
@@ -42,10 +43,28 @@ void AvoidReturnWithVoidValueCheck::check(
const auto *VoidReturn = Result.Nodes.getNodeAs<ReturnStmt>("void_return");
if (IgnoreMacros && VoidReturn->getBeginLoc().isMacroID())
return;
- if (!StrictMode && !Result.Nodes.getNodeAs<CompoundStmt>("compound_parent"))
+ const auto *SurroundingBlock =
+ Result.Nodes.getNodeAs<CompoundStmt>("compound_parent");
+ if (!StrictMode && !SurroundingBlock)
return;
+ const StringRef ReturnExpr =
+ Lexer::getSourceText(CharSourceRange::getTokenRange(
+ VoidReturn->getRetValue()->getSourceRange()),
+ *Result.SourceManager, getLangOpts());
+ SourceLocation SemicolonPos;
+ if (const std::optional<Token> NextToken =
+ Lexer::findNextToken(VoidReturn->getRetValue()->getEndLoc(),
+ *Result.SourceManager, getLangOpts()))
+ SemicolonPos = NextToken->getEndLoc();
+ std::string Replacement = (ReturnExpr + "; return;").str();
+ if (!SurroundingBlock)
+ Replacement = "{" + Replacement + "}";
diag(VoidReturn->getBeginLoc(), "return statement within a void function "
- "should not have a specified return value");
+ "should not have a specified return value")
+ << FixItHint::CreateReplacement(
+ CharSourceRange::getTokenRange(VoidReturn->getBeginLoc(),
+ SemicolonPos),
----------------
HerrCai0907 wrote:
what will happen if `SemicolonPos` is invalid?
https://github.com/llvm/llvm-project/pull/81420
More information about the cfe-commits
mailing list