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
