llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-tools-extra Author: Victor Chernyakin (localspook) <details> <summary>Changes</summary> Fixes #<!-- -->174827. --- Full diff: https://github.com/llvm/llvm-project/pull/175473.diff 2 Files Affected: - (modified) clang-tools-extra/clang-tidy/readability/RedundantTypenameCheck.cpp (+15-12) - (modified) clang-tools-extra/test/clang-tidy/checkers/readability/redundant-typename.cpp (+10) ``````````diff 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> `````````` </details> https://github.com/llvm/llvm-project/pull/175473 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
