[llvm-branch-commits] [clang-tools-extra] 6b65bbc - [clang-tidy] Fix false positive from `readability-redundant-typename` on partially specialized variables (#175473)
Cullen Rhodes via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Feb 23 23:10:27 PST 2026
Author: Victor Chernyakin
Date: 2026-02-24T07:10:17Z
New Revision: 6b65bbc4d66fbb0c2b0f670bf8ed61399a6ac934
URL: https://github.com/llvm/llvm-project/commit/6b65bbc4d66fbb0c2b0f670bf8ed61399a6ac934
DIFF: https://github.com/llvm/llvm-project/commit/6b65bbc4d66fbb0c2b0f670bf8ed61399a6ac934.diff
LOG: [clang-tidy] Fix false positive from `readability-redundant-typename` on partially specialized variables (#175473)
Fixes #174827.
(cherry picked from commit 6ddab42952eeccf7aedefade42611a272ba72745)
Added:
Modified:
clang-tools-extra/clang-tidy/readability/RedundantTypenameCheck.cpp
clang-tools-extra/test/clang-tidy/checkers/readability/redundant-typename.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clang-tidy/readability/RedundantTypenameCheck.cpp b/clang-tools-extra/clang-tidy/readability/RedundantTypenameCheck.cpp
index 0816625b1937d..fde7748df31fa 100644
--- a/clang-tools-extra/clang-tidy/readability/RedundantTypenameCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/RedundantTypenameCheck.cpp
@@ -25,22 +25,25 @@ void RedundantTypenameCheck::registerMatchers(MatchFinder *Finder) {
if (!getLangOpts().CPlusPlus20)
return;
- const auto InImplicitTypenameContext = anyOf(
- hasParent(decl(anyOf(
- typedefNameDecl(), templateTypeParmDecl(), nonTypeTemplateParmDecl(),
- friendDecl(), fieldDecl(),
- varDecl(hasDeclContext(anyOf(namespaceDecl(), translationUnitDecl())),
- unless(parmVarDecl())),
- parmVarDecl(hasParent(expr(requiresExpr()))),
- parmVarDecl(hasParent(typeLoc(hasParent(decl(
- anyOf(cxxMethodDecl(), hasParent(friendDecl()),
+ const auto InImplicitTypenameContext =
+ anyOf(hasParent(decl(anyOf(
+ typedefNameDecl(), templateTypeParmDecl(),
+ nonTypeTemplateParmDecl(), friendDecl(), fieldDecl(),
+ parmVarDecl(hasParent(expr(requiresExpr()))),
+ parmVarDecl(hasParent(typeLoc(hasParent(decl(anyOf(
+ cxxMethodDecl(), hasParent(friendDecl()),
functionDecl(has(nestedNameSpecifier())),
cxxDeductionGuideDecl(hasDeclContext(recordDecl())))))))),
- // Match return types.
- functionDecl(unless(cxxConversionDecl()))))),
- hasParent(expr(anyOf(cxxNamedCastExpr(), cxxNewExpr()))));
+ // Match return types.
+ functionDecl(unless(cxxConversionDecl()))))),
+ hasParent(expr(anyOf(cxxNamedCastExpr(), cxxNewExpr()))));
Finder->addMatcher(
typeLoc(InImplicitTypenameContext).bind("dependentTypeLoc"), this);
+ Finder->addMatcher(
+ varDecl(hasDeclContext(anyOf(namespaceDecl(), translationUnitDecl())),
+ unless(parmVarDecl()),
+ hasTypeLoc(typeLoc().bind("dependentTypeLoc"))),
+ this);
}
void RedundantTypenameCheck::check(const MatchFinder::MatchResult &Result) {
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/redundant-typename.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/redundant-typename.cpp
index 96bd7b6412724..cb58826efbdaa 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/readability/redundant-typename.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/redundant-typename.cpp
@@ -157,6 +157,16 @@ typename T::R v = typename T::R();
// CHECK-MESSAGES-20: :[[@LINE-1]]:1: warning: redundant 'typename' [readability-redundant-typename]
// CHECK-FIXES-20: T::R v = typename T::R();
+template <typename T, typename>
+typename T::R PartiallySpecializedVariable = true;
+// CHECK-MESSAGES-20: :[[@LINE-1]]:1: warning: redundant 'typename' [readability-redundant-typename]
+// CHECK-FIXES-20: T::R PartiallySpecializedVariable = true;
+
+template <typename T>
+typename T::R PartiallySpecializedVariable<T, typename T::R> = false;
+// CHECK-MESSAGES-20: :[[@LINE-1]]:1: warning: redundant 'typename' [readability-redundant-typename]
+// CHECK-FIXES-20: T::R PartiallySpecializedVariable<T, typename T::R> = false;
+
#endif // __cplusplus >= 201402L
template <typename T>
More information about the llvm-branch-commits
mailing list