diff --git a/clang-tools-extra/clang-tidy/performance/EnumSizeCheck.cpp b/clang-tools-extra/clang-tidy/performance/EnumSizeCheck.cpp index 0d44b8c7706c3c..0f3e9d3ef75917 100644 --- a/clang-tools-extra/clang-tidy/performance/EnumSizeCheck.cpp +++ b/clang-tools-extra/clang-tidy/performance/EnumSizeCheck.cpp @@ -23,6 +23,8 @@ namespace clang::tidy::performance { namespace { +AST_MATCHER(EnumDecl, hasEnumerators) { return !Node.enumerators().empty(); } + const std::uint64_t Min8 = std::imaxabs(std::numeric_limits::min()); const std::uint64_t Max8 = std::numeric_limits::max(); @@ -93,6 +95,7 @@ bool EnumSizeCheck::isLanguageVersionSupported( void EnumSizeCheck::registerMatchers(MatchFinder *Finder) { Finder->addMatcher( enumDecl(unless(isExpansionInSystemHeader()), isDefinition(), + hasEnumerators(), unless(matchers::matchesAnyListedName(EnumIgnoreList))) .bind("e"), this); diff --git a/clang-tools-extra/docs/clang-tidy/checks/performance/enum-size.rst b/clang-tools-extra/docs/clang-tidy/checks/performance/enum-size.rst index 08054123366eee..f72b8c7eabc222 100644 --- a/clang-tools-extra/docs/clang-tidy/checks/performance/enum-size.rst +++ b/clang-tools-extra/docs/clang-tidy/checks/performance/enum-size.rst @@ -58,6 +58,8 @@ terms of memory usage and cache performance. However, it's important to consider the trade-offs and potential impact on code readability and maintainability. +Enums without enumerators (empty) are excluded from analysis. + Requires C++11 or above. Does not provide auto-fixes. diff --git a/clang-tools-extra/test/clang-tidy/checkers/performance/enum-size.cpp b/clang-tools-extra/test/clang-tidy/checkers/performance/enum-size.cpp index 37481a8141c5c4..782c12080f5180 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/performance/enum-size.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/performance/enum-size.cpp @@ -102,4 +102,7 @@ enum class IgnoredSecondEnum unused2 = 2 }; +enum class EnumClassWithoutValues : int {}; +enum EnumWithoutValues {}; + }