https://github.com/berkaysahiin updated 
https://github.com/llvm/llvm-project/pull/184684

>From 1933ef6ccabc672a17c9877d4464c7efd77c9a26 Mon Sep 17 00:00:00 2001
From: Berkay <[email protected]>
Date: Wed, 4 Mar 2026 23:23:51 +0300
Subject: [PATCH] [clang-tidy] Fix readability-else-after-return for
 [[likely]]/[[unlikely]] attributed then-branches

---
 .../readability/ElseAfterReturnCheck.cpp      | 14 +++++++++--
 clang-tools-extra/docs/ReleaseNotes.rst       |  4 +++-
 .../else-after-return-if-likely.cpp           | 24 +++++++++++++++++++
 3 files changed, 39 insertions(+), 3 deletions(-)
 create mode 100644 
clang-tools-extra/test/clang-tidy/checkers/readability/else-after-return-if-likely.cpp

diff --git a/clang-tools-extra/clang-tidy/readability/ElseAfterReturnCheck.cpp 
b/clang-tools-extra/clang-tidy/readability/ElseAfterReturnCheck.cpp
index 7e93d619e2a9f..5f0bd27be03cc 100644
--- a/clang-tools-extra/clang-tidy/readability/ElseAfterReturnCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/ElseAfterReturnCheck.cpp
@@ -39,6 +39,15 @@ class PPConditionalCollector : public PPCallbacks {
   const SourceManager &SM;
 };
 
+AST_MATCHER_P(Stmt, stripAttribute, ast_matchers::internal::Matcher<Stmt>,
+              InnerMatcher) {
+  const Stmt *S = &Node;
+  if (const auto *AttrStmt = dyn_cast<AttributedStmt>(S))
+    S = AttrStmt->getSubStmt();
+
+  return S && InnerMatcher.matches(*S, Finder, Builder);
+}
+
 AST_MATCHER_P(Stmt, stripLabelLikeStatements,
               ast_matchers::internal::Matcher<Stmt>, InnerMatcher) {
   const Stmt *S = Node.stripLabelLikeStatements();
@@ -178,8 +187,9 @@ void ElseAfterReturnCheck::registerMatchers(MatchFinder 
*Finder) {
 
   const auto IfWithInterruptingThenElse =
       ifStmt(unless(isConstexpr()), unless(isConsteval()),
-             hasThen(stmt(anyOf(InterruptsControlFlow,
-                                compoundStmt(has(InterruptsControlFlow))))),
+             hasThen(stripAttribute(
+                 stmt(anyOf(InterruptsControlFlow,
+                            compoundStmt(has(InterruptsControlFlow)))))),
              hasElse(stmt().bind("else")))
           .bind("if");
 
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index 309b2df5c2eb4..da7879275efdf 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -282,7 +282,9 @@ Changes in existing checks
 
 - Improved :doc:`readability-else-after-return
   <clang-tidy/checks/readability/else-after-return>` check by fixing missed
-  diagnostics when ``if`` statements appear in unbraced ``switch`` case labels.
+  diagnostics when ``if`` statements appear in unbraced ``switch`` case labels,
+  and by handling attributed ``if`` then-branches such as ``[[likely]]`` and
+  ``[[unlikely]]``.
 
 - Improved :doc:`readability-enum-initial-value
   <clang-tidy/checks/readability/enum-initial-value>` check: the warning 
message
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/readability/else-after-return-if-likely.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/readability/else-after-return-if-likely.cpp
new file mode 100644
index 0000000000000..9ee450b7b4215
--- /dev/null
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/readability/else-after-return-if-likely.cpp
@@ -0,0 +1,24 @@
+// RUN: %check_clang_tidy %s readability-else-after-return %t -- -- -std=c++20
+
+void f() {
+  if (true) [[likely]] {
+    return;
+  } else { // comment-0
+      // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: do not use 'else' after 
'return'
+      // CHECK-FIXES: {{^}}     } // comment-0
+  }
+
+  if (false) [[unlikely]] {
+    return;
+  } else { // comment-1
+      // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: do not use 'else' after 
'return'
+      // CHECK-FIXES: {{^}}     } // comment-1
+  }
+
+  if (true) [[likely]]
+    return;
+  else // comment-2
+    // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: do not use 'else' after 
'return'
+    // CHECK-FIXES: {{^}}   // comment-2
+    int _ = 10;
+}

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to