https://github.com/localspook updated 
https://github.com/llvm/llvm-project/pull/190899

>From d6006506c73a20314b1ed3ffe0fe50e2104ea6e9 Mon Sep 17 00:00:00 2001
From: Victor Chernyakin <[email protected]>
Date: Tue, 7 Apr 2026 19:54:07 -0700
Subject: [PATCH 1/2] [clang-tidy] Fix `bugprone-incorrect-enable-if` inserting
 duplicate `typename`

---
 .../clang-tidy/bugprone/IncorrectEnableIfCheck.cpp       | 9 ++++-----
 clang-tools-extra/docs/ReleaseNotes.rst                  | 6 ++++++
 .../clang-tidy/checkers/bugprone/incorrect-enable-if.cpp | 6 ++++++
 3 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/clang-tools-extra/clang-tidy/bugprone/IncorrectEnableIfCheck.cpp 
b/clang-tools-extra/clang-tidy/bugprone/IncorrectEnableIfCheck.cpp
index 6181ac84f36e3..5a592e10a599e 100644
--- a/clang-tools-extra/clang-tidy/bugprone/IncorrectEnableIfCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/IncorrectEnableIfCheck.cpp
@@ -47,8 +47,8 @@ void IncorrectEnableIfCheck::check(const 
MatchFinder::MatchResult &Result) {
       Result.Nodes.getNodeAs<TemplateSpecializationTypeLoc>(
           "enable_if_specialization");
 
-  if (!EnableIf || !EnableIfSpecializationLoc)
-    return;
+  assert(EnableIf);
+  assert(EnableIfSpecializationLoc);
 
   const SourceManager &SM = *Result.SourceManager;
   const SourceLocation RAngleLoc =
@@ -57,9 +57,8 @@ void IncorrectEnableIfCheck::check(const 
MatchFinder::MatchResult &Result) {
   auto Diag = diag(EnableIf->getBeginLoc(),
                    "incorrect std::enable_if usage detected; use "
                    "'typename std::enable_if<...>::type'");
-  // FIXME: This should handle the enable_if specialization already having an
-  // elaborated keyword.
-  if (!getLangOpts().CPlusPlus20) {
+  if (!getLangOpts().CPlusPlus20 &&
+      EnableIfSpecializationLoc->getElaboratedKeywordLoc().isInvalid()) {
     Diag << 
FixItHint::CreateInsertion(EnableIfSpecializationLoc->getBeginLoc(),
                                        "typename ");
   }
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index eb735e6e62ee4..60fd785246f54 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -224,6 +224,12 @@ Changes in existing checks
   positive when increment/decrement operators appear inside lambda bodies that
   are part of a condition expression.
 
+- Improved :doc:`bugprone-incorrect-enable-if
+  <clang-tidy/checks/bugprone/incorrect-enable-if>` check to not
+  insert an extraneous ``typename`` on code like
+  ``typename std::enable_if<...>``, where there's already a
+  ``typename`` and only the ``::type`` at the end is missing.
+
 - Improved :doc:`bugprone-macro-parentheses
   <clang-tidy/checks/bugprone/macro-parentheses>` check by printing the macro
   definition in the warning message if the macro is defined on command line.
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/bugprone/incorrect-enable-if.cpp 
b/clang-tools-extra/test/clang-tidy/checkers/bugprone/incorrect-enable-if.cpp
index 0c418efe1420b..81612a50e5bbd 100644
--- 
a/clang-tools-extra/test/clang-tidy/checkers/bugprone/incorrect-enable-if.cpp
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/bugprone/incorrect-enable-if.cpp
@@ -42,6 +42,12 @@ void invalid_multiple() {}
 // CHECK-FIXES: template <typename T, typename = typename 
std::enable_if<T::some_value>::type, typename = typename 
std::enable_if<T::other_value>::type>
 // CHECK-FIXES-CXX20: template <typename T, typename = 
std::enable_if<T::some_value>::type, typename = 
std::enable_if<T::other_value>::type>
 
+template <typename T, typename = typename std::enable_if<T::some_value>>
+void invalid_typename_keyword() {}
+// CHECK-MESSAGES: [[@LINE-2]]:23: warning: incorrect std::enable_if usage 
detected; use 'typename std::enable_if<...>::type' 
[bugprone-incorrect-enable-if]
+// CHECK-FIXES: template <typename T, typename = typename 
std::enable_if<T::some_value>::type>
+// CHECK-FIXES-CXX20: template <typename T, typename = typename 
std::enable_if<T::some_value>::type>
+
 template <typename T, typename = std::enable_if<T::some_value>>
 struct InvalidClass {};
 // CHECK-MESSAGES: [[@LINE-2]]:23: warning: incorrect std::enable_if usage 
detected; use 'typename std::enable_if<...>::type' 
[bugprone-incorrect-enable-if]

>From e67ac9e993c308d91ad5f03885aaf6546567f6c1 Mon Sep 17 00:00:00 2001
From: Victor Chernyakin <[email protected]>
Date: Thu, 9 Apr 2026 18:13:12 -0700
Subject: [PATCH 2/2] Adjust line wrapping

Co-authored-by: EugeneZelenko <[email protected]>
---
 clang-tools-extra/docs/ReleaseNotes.rst | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index 60fd785246f54..40723b98a2b78 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -227,8 +227,8 @@ Changes in existing checks
 - Improved :doc:`bugprone-incorrect-enable-if
   <clang-tidy/checks/bugprone/incorrect-enable-if>` check to not
   insert an extraneous ``typename`` on code like
-  ``typename std::enable_if<...>``, where there's already a
-  ``typename`` and only the ``::type`` at the end is missing.
+  ``typename std::enable_if<...>``, where there's already a ``typename`` and
+  only the ``::type`` at the end is missing.
 
 - Improved :doc:`bugprone-macro-parentheses
   <clang-tidy/checks/bugprone/macro-parentheses>` check by printing the macro

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

Reply via email to