https://github.com/localspook created 
https://github.com/llvm/llvm-project/pull/182727

None

>From 59e13c810553cc9fe783c175685a9ef72596a4f6 Mon Sep 17 00:00:00 2001
From: Victor Chernyakin <[email protected]>
Date: Sat, 21 Feb 2026 23:02:17 -0800
Subject: [PATCH] [clang-tidy][NFC] Refactor
 `readability-reference-to-constructed-temporary`

---
 .../ReferenceToConstructedTemporaryCheck.cpp  | 54 ++++---------------
 .../ReferenceToConstructedTemporaryCheck.h    |  8 ++-
 2 files changed, 16 insertions(+), 46 deletions(-)

diff --git 
a/clang-tools-extra/clang-tidy/readability/ReferenceToConstructedTemporaryCheck.cpp
 
b/clang-tools-extra/clang-tidy/readability/ReferenceToConstructedTemporaryCheck.cpp
index 398bee1d40923..2aea09226ede0 100644
--- 
a/clang-tools-extra/clang-tidy/readability/ReferenceToConstructedTemporaryCheck.cpp
+++ 
b/clang-tools-extra/clang-tidy/readability/ReferenceToConstructedTemporaryCheck.cpp
@@ -16,57 +16,23 @@ namespace clang::tidy::readability {
 
 namespace {
 
-// Predicate structure to check if lifetime of temporary is not extended by
-// ValueDecl pointed out by ID
-struct NotExtendedByDeclBoundToPredicate {
-  bool operator()(const internal::BoundNodesMap &Nodes) const {
-    const auto *Other = Nodes.getNodeAs<ValueDecl>(ID);
-    if (!Other)
-      return true;
-
-    const auto *Self = Node.get<MaterializeTemporaryExpr>();
-    if (!Self)
-      return true;
-
-    return Self->getExtendingDecl() != Other;
-  }
-
-  StringRef ID;
-  ::clang::DynTypedNode Node;
-};
-
-AST_MATCHER_P(MaterializeTemporaryExpr, isExtendedByDeclBoundTo, StringRef,
-              ID) {
-  const NotExtendedByDeclBoundToPredicate Predicate{
-      ID, ::clang::DynTypedNode::create(Node)};
-  return Builder->removeBindings(Predicate);
+AST_MATCHER_P(MaterializeTemporaryExpr, isExtendedBy,
+              ast_matchers::internal::Matcher<ValueDecl>, InnerMatcher) {
+  const ValueDecl *ExtendingDecl = Node.getExtendingDecl();
+  return ExtendingDecl && InnerMatcher.matches(*ExtendingDecl, Finder, 
Builder);
 }
 
 } // namespace
 
-bool ReferenceToConstructedTemporaryCheck::isLanguageVersionSupported(
-    const LangOptions &LangOpts) const {
-  return LangOpts.CPlusPlus;
-}
-
-std::optional<TraversalKind>
-ReferenceToConstructedTemporaryCheck::getCheckTraversalKind() const {
-  return TK_AsIs;
-}
-
 void ReferenceToConstructedTemporaryCheck::registerMatchers(
     MatchFinder *Finder) {
   Finder->addMatcher(
-      varDecl(unless(isExpansionInSystemHeader()),
-              hasType(qualType(references(qualType().bind("type")))),
-              decl().bind("var"),
-              hasInitializer(expr(hasDescendant(
-                  materializeTemporaryExpr(
-                      isExtendedByDeclBoundTo("var"),
-                      has(expr(anyOf(cxxTemporaryObjectExpr(), initListExpr(),
-                                     cxxConstructExpr()),
-                               hasType(qualType(equalsBoundNode("type"))))))
-                      .bind("temporary"))))),
+      materializeTemporaryExpr(
+          hasType(qualType().bind("type")),
+          isExtendedBy(varDecl(hasType(qualType(references(
+                                   qualType(equalsBoundNode("type"))))))
+                           .bind("var")))
+          .bind("temporary"),
       this);
 }
 
diff --git 
a/clang-tools-extra/clang-tidy/readability/ReferenceToConstructedTemporaryCheck.h
 
b/clang-tools-extra/clang-tidy/readability/ReferenceToConstructedTemporaryCheck.h
index 4c2b7f7e7f174..fe65e6f17f981 100644
--- 
a/clang-tools-extra/clang-tidy/readability/ReferenceToConstructedTemporaryCheck.h
+++ 
b/clang-tools-extra/clang-tidy/readability/ReferenceToConstructedTemporaryCheck.h
@@ -25,8 +25,12 @@ class ReferenceToConstructedTemporaryCheck : public 
ClangTidyCheck {
       : ClangTidyCheck(Name, Context) {}
   void registerMatchers(ast_matchers::MatchFinder *Finder) override;
   void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
-  bool isLanguageVersionSupported(const LangOptions &LangOpts) const override;
-  std::optional<TraversalKind> getCheckTraversalKind() const override;
+  bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {
+    return LangOpts.CPlusPlus;
+  }
+  std::optional<TraversalKind> getCheckTraversalKind() const override {
+    return TK_AsIs;
+  }
 };
 
 } // namespace clang::tidy::readability

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

Reply via email to