https://github.com/frank-suwen updated 
https://github.com/llvm/llvm-project/pull/220164

>From 53a544be13758013c3125b4b269b23b8be22da35 Mon Sep 17 00:00:00 2001
From: frank-suwen <[email protected]>
Date: Mon, 31 Aug 2026 23:32:36 -0700
Subject: [PATCH 1/2] [clang-tidy] Handle auto&& in missing-std-forward

---
 .../MissingStdForwardCheck.cpp                |  4 +---
 .../missing-std-forward-cxx20.cpp             | 24 +++++++++++++++++++
 2 files changed, 25 insertions(+), 3 deletions(-)
 create mode 100644 
clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/missing-std-forward-cxx20.cpp

diff --git 
a/clang-tools-extra/clang-tidy/cppcoreguidelines/MissingStdForwardCheck.cpp 
b/clang-tools-extra/clang-tidy/cppcoreguidelines/MissingStdForwardCheck.cpp
index 4a77bd7948615..0cae9e232cd50 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/MissingStdForwardCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/MissingStdForwardCheck.cpp
@@ -28,9 +28,7 @@ AST_MATCHER_P(QualType, possiblyPackExpansionOf,
 AST_MATCHER(ParmVarDecl, isTemplateTypeParameter) {
   const ast_matchers::internal::Matcher<QualType> Inner =
       possiblyPackExpansionOf(
-          qualType(rValueReferenceType(),
-                   references(templateTypeParmType(
-                       hasDeclaration(templateTypeParmDecl()))),
+          qualType(rValueReferenceType(), references(templateTypeParmType()),
                    unless(references(qualType(isConstQualified())))));
   if (!Inner.matches(Node.getType(), Finder, Builder))
     return false;
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/missing-std-forward-cxx20.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/missing-std-forward-cxx20.cpp
new file mode 100644
index 0000000000000..b9d682ba6ebb6
--- /dev/null
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/missing-std-forward-cxx20.cpp
@@ -0,0 +1,24 @@
+// RUN: %check_clang_tidy -std=c++20-or-later %s 
cppcoreguidelines-missing-std-forward %t -- -- -fno-delayed-template-parsing
+
+#include <utility>
+
+void does_not_forward_auto(auto &&t) {
+  // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: forwarding reference parameter 
't' is never forwarded inside the function body 
[cppcoreguidelines-missing-std-forward]
+  (void)t;
+}
+
+void does_forward_auto(auto &&t) {
+  (void)std::forward<decltype(t)>(t);
+}
+
+void const_auto_rvalue_reference(const auto &&t) {
+  (void)t;
+}
+
+template <typename T>
+void mixed_parameters(T &&t, auto &&u) {
+  // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: forwarding reference parameter 
't' is never forwarded inside the function body 
[cppcoreguidelines-missing-std-forward]
+  // CHECK-MESSAGES: :[[@LINE-2]]:37: warning: forwarding reference parameter 
'u' is never forwarded inside the function body 
[cppcoreguidelines-missing-std-forward]
+  (void)t;
+  (void)u;
+}

>From 438a5df0f0ebfb99d4c37ff10798d7b48336145c Mon Sep 17 00:00:00 2001
From: frank-suwen <[email protected]>
Date: Wed, 2 Sep 2026 20:48:31 -0700
Subject: [PATCH 2/2] [clang-tidy] Address review feedback on release note and
 nit

---
 clang-tools-extra/docs/ReleaseNotes.md                      | 4 ++++
 .../cppcoreguidelines/missing-std-forward-cxx20.cpp         | 6 +++---
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/clang-tools-extra/docs/ReleaseNotes.md 
b/clang-tools-extra/docs/ReleaseNotes.md
index 6fe497e5f6eaf..4f0a3f374db4d 100644
--- a/clang-tools-extra/docs/ReleaseNotes.md
+++ b/clang-tools-extra/docs/ReleaseNotes.md
@@ -148,6 +148,10 @@ infrastructure are described first, followed by 
tool-specific sections.
 - Improved {doc}`cppcoreguidelines-use-enum-class
   <clang-tidy/checks/cppcoreguidelines/use-enum-class>` check by omitting 
unnamed enums from the `enum class` requirement, as previously the check 
suggested users an ill-formed fix.
 
+- Improved {doc}`cppcoreguidelines-missing-std-forward
+  <clang-tidy/checks/cppcoreguidelines/missing-std-forward>` check by 
diagnosing
+  unforwarded `auto&&` parameters in C++20 abbreviated function templates.
+
 - Improved {doc}`misc-const-correctness
   <clang-tidy/checks/misc/const-correctness>` check:
 
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/missing-std-forward-cxx20.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/missing-std-forward-cxx20.cpp
index b9d682ba6ebb6..cbf3def7800bb 100644
--- 
a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/missing-std-forward-cxx20.cpp
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/missing-std-forward-cxx20.cpp
@@ -3,7 +3,7 @@
 #include <utility>
 
 void does_not_forward_auto(auto &&t) {
-  // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: forwarding reference parameter 
't' is never forwarded inside the function body 
[cppcoreguidelines-missing-std-forward]
+  // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: forwarding reference parameter 
't' is never forwarded inside the function body
   (void)t;
 }
 
@@ -17,8 +17,8 @@ void const_auto_rvalue_reference(const auto &&t) {
 
 template <typename T>
 void mixed_parameters(T &&t, auto &&u) {
-  // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: forwarding reference parameter 
't' is never forwarded inside the function body 
[cppcoreguidelines-missing-std-forward]
-  // CHECK-MESSAGES: :[[@LINE-2]]:37: warning: forwarding reference parameter 
'u' is never forwarded inside the function body 
[cppcoreguidelines-missing-std-forward]
+  // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: forwarding reference parameter 
't' is never forwarded inside the function body
+  // CHECK-MESSAGES: :[[@LINE-2]]:37: warning: forwarding reference parameter 
'u' is never forwarded inside the function body
   (void)t;
   (void)u;
 }

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

Reply via email to