================
@@ -40,12 +42,35 @@ void 
AvoidReturnWithVoidValueCheck::registerMatchers(MatchFinder *Finder) {
 void AvoidReturnWithVoidValueCheck::check(
     const MatchFinder::MatchResult &Result) {
   const auto *VoidReturn = Result.Nodes.getNodeAs<ReturnStmt>("void_return");
-  if (IgnoreMacros && VoidReturn->getBeginLoc().isMacroID())
+  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;
-  diag(VoidReturn->getBeginLoc(), "return statement within a void function "
-                                  "should not have a specified return value");
+  }
+  DiagnosticBuilder Diag = diag(VoidReturn->getBeginLoc(),
+                                "return statement within a void function "
+                                "should not have a specified return value");
+  std::optional<Token> SemicolonPos =
+      Lexer::findNextToken(VoidReturn->getRetValue()->getEndLoc(),
+                           *Result.SourceManager, getLangOpts());
+  if (!SemicolonPos) {
+    return;
+  }
+  const StringRef ReturnExpr =
+      Lexer::getSourceText(CharSourceRange::getTokenRange(
+                               VoidReturn->getRetValue()->getSourceRange()),
+                           *Result.SourceManager, getLangOpts());
+  std::string Replacement = (ReturnExpr + "; return;").str();
+  if (!SurroundingBlock) {
+    Replacement = "{" + Replacement + "}";
+  }
+  Diag << FixItHint::CreateReplacement(
----------------
PiotrZSL wrote:

instead of replacing just use 
[CreateRemoval](https://clang.llvm.org/doxygen/classclang_1_1FixItHint.html#a9e11ae1e22983fd4abea805755ecddbe)
 to remove begin, and 
[CreateInsertion](https://clang.llvm.org/doxygen/classclang_1_1FixItHint.html#afd481d826e9ddaa39fc82a698a810246)
 to insert `return;` and `{}` if needed.

https://github.com/llvm/llvm-project/pull/81420
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to