[clang-tools-extra] [clang-tidy] Fix DefaultHungarianPrefix for incomplete classes (PR #215734)
Zeyi Xu via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 11 23:17:44 PDT 2026
https://github.com/zeyi2 created https://github.com/llvm/llvm-project/pull/215734
None
>From 8c73cf600e2d780f16d7ecf1e844e622823610ff Mon Sep 17 00:00:00 2001
From: Zeyi Xu <mitchell.xu2 at gmail.com>
Date: Wed, 12 Aug 2026 14:17:27 +0800
Subject: [PATCH] [clang-tidy] Fix DefaultHungarianPrefix for incomplete
classes
---
.../clang-tidy/readability/IdentifierNamingCheck.cpp | 5 ++++-
clang-tools-extra/docs/ReleaseNotes.md | 9 +++++++++
.../identifier-naming/hungarian-notation1/.clang-tidy | 1 +
.../readability/identifier-naming-hungarian-notation.cpp | 4 ++++
4 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
index dfbd061986128..4ac23948c5e01 100644
--- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
@@ -416,6 +416,9 @@ IdentifierNamingCheck::~IdentifierNamingCheck() = default;
bool IdentifierNamingCheck::HungarianNotation::checkOptionValid(
int StyleKindIndex) const {
+ if (StyleKindIndex == SK_Default)
+ return true;
+
if ((StyleKindIndex >= SK_EnumConstant) &&
(StyleKindIndex <= SK_ConstantParameter))
return true;
@@ -643,7 +646,7 @@ StringRef IdentifierNamingCheck::HungarianNotation::getClassPrefix(
!isOptionEnabled("TreatStructAsClass", HNOption.General))
return {};
- return CRD->isAbstract() ? "I" : "C";
+ return CRD->hasDefinition() && CRD->isAbstract() ? "I" : "C";
}
std::string IdentifierNamingCheck::HungarianNotation::getEnumPrefix(
diff --git a/clang-tools-extra/docs/ReleaseNotes.md b/clang-tools-extra/docs/ReleaseNotes.md
index 5ded07934d906..c803ef9b82477 100644
--- a/clang-tools-extra/docs/ReleaseNotes.md
+++ b/clang-tools-extra/docs/ReleaseNotes.md
@@ -121,6 +121,15 @@ infrastructure are described first, followed by tool-specific sections.
`std::initializer_list` constructor, as the braced form could select a
different constructor.
+- Improved {doc}`readability-identifier-naming
+ <clang-tidy/checks/readability/identifier-naming>` check:
+
+ - Fixed a crash when checking forward-declared classes with
+ {option}`DefaultHungarianPrefix` enabled.
+
+ - Fixed {option}`DefaultHungarianPrefix` being incorrectly diagnosed as an
+ invalid option.
+
- Improved {doc}`readability-named-parameter
<clang-tidy/checks/readability/named-parameter>` check by ignoring
standard tag types (e.g. `std::in_place_t`, `std::allocator_arg_t`,
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming/hungarian-notation1/.clang-tidy b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming/hungarian-notation1/.clang-tidy
index ff41479e2e96d..9852a5ff56587 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming/hungarian-notation1/.clang-tidy
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming/hungarian-notation1/.clang-tidy
@@ -30,6 +30,7 @@ CheckOptions:
readability-identifier-naming.StaticConstantCase: CamelCase
readability-identifier-naming.StaticVariableCase: CamelCase
readability-identifier-naming.VariableCase: CamelCase
+ readability-identifier-naming.DefaultHungarianPrefix: On
readability-identifier-naming.AbstractClassHungarianPrefix: On
readability-identifier-naming.ClassHungarianPrefix: On
readability-identifier-naming.ClassConstantHungarianPrefix: On
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-hungarian-notation.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-hungarian-notation.cpp
index 083a7f2400c17..57cec325e0bcc 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-hungarian-notation.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-hungarian-notation.cpp
@@ -581,6 +581,10 @@ INDEX iIndex = 0;
//===----------------------------------------------------------------------===//
// Class
//===----------------------------------------------------------------------===//
+class Incomplete;
+// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for identifier 'Incomplete'
+// CHECK-FIXES: class CIncomplete;
+
class ClassCase { int Func(); };
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for class 'ClassCase' [readability-identifier-naming]
// CHECK-FIXES: class CClassCase { int Func(); };
More information about the cfe-commits
mailing list