[clang-tools-extra] Clang-Tidy: Fix `cppcoreguidelines-use-enum-class` anonymous enum bug (PR #215352)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 10 10:55:58 PDT 2026
https://github.com/void2012 updated https://github.com/llvm/llvm-project/pull/215352
>From c52a49dd7103ba0a87070ab79b862ceb89d5f711 Mon Sep 17 00:00:00 2001
From: void_17 <heroerror3 at gmail.com>
Date: Tue, 11 Aug 2026 00:40:52 +0700
Subject: [PATCH 1/3] Ignore anonymous enums in `UseEnumClassCheck`
`UseEnumClassCheck::registerMatchers` didn't check for empty enum names, fix this
---
.../clang-tidy/cppcoreguidelines/UseEnumClassCheck.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/UseEnumClassCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/UseEnumClassCheck.cpp
index 84720d10c233e..8ed64cbb9214e 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/UseEnumClassCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/UseEnumClassCheck.cpp
@@ -28,8 +28,8 @@ void UseEnumClassCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
void UseEnumClassCheck::registerMatchers(MatchFinder *Finder) {
const auto EnumDecl =
IgnoreUnscopedEnumsInClasses
- ? enumDecl(unless(isScoped()), unless(hasParent(recordDecl())))
- : enumDecl(unless(isScoped()));
+ ? enumDecl(unless(isScoped()), unless(hasName("")), unless(hasParent(recordDecl())))
+ : enumDecl(unless(isScoped()), unless(hasName("")));
Finder->addMatcher(EnumDecl.bind("unscoped_enum"), this);
}
>From dcd92724588e61a7713bac40e039f61606615ef0 Mon Sep 17 00:00:00 2001
From: void_17 <heroerror3 at gmail.com>
Date: Tue, 11 Aug 2026 00:48:59 +0700
Subject: [PATCH 2/3] Add anonymous enum test to
`cppcoreguidelines/use-enum-class.cpp`
---
.../clang-tidy/checkers/cppcoreguidelines/use-enum-class.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/use-enum-class.cpp b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/use-enum-class.cpp
index f53d787f80efa..033865a7ac830 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/use-enum-class.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/use-enum-class.cpp
@@ -60,3 +60,5 @@ enum ForwardE : int;
enum class ForwardEC : int;
enum struct ForwardES : int;
+
+enum { A };
>From da263493562fa7fe6879cc32d24e827410e09bd6 Mon Sep 17 00:00:00 2001
From: void_17 <heroerror3 at gmail.com>
Date: Tue, 11 Aug 2026 00:53:56 +0700
Subject: [PATCH 3/3] Fix formatting
---
.../clang-tidy/cppcoreguidelines/UseEnumClassCheck.cpp | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/UseEnumClassCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/UseEnumClassCheck.cpp
index 84720d10c233e..9d3915e509ec8 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/UseEnumClassCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/UseEnumClassCheck.cpp
@@ -26,10 +26,10 @@ void UseEnumClassCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
}
void UseEnumClassCheck::registerMatchers(MatchFinder *Finder) {
- const auto EnumDecl =
- IgnoreUnscopedEnumsInClasses
- ? enumDecl(unless(isScoped()), unless(hasParent(recordDecl())))
- : enumDecl(unless(isScoped()));
+ const auto EnumDecl = IgnoreUnscopedEnumsInClasses
+ ? enumDecl(unless(isScoped()), unless(hasName("")),
+ unless(hasParent(recordDecl())))
+ : enumDecl(unless(isScoped()), unless(hasName("")));
Finder->addMatcher(EnumDecl.bind("unscoped_enum"), this);
}
More information about the cfe-commits
mailing list