Author: Zeyi Xu
Date: 2026-08-12T18:49:54+08:00
New Revision: d8dece650e84a1647ceaa035327fc3d8989accfd

URL: 
https://github.com/llvm/llvm-project/commit/d8dece650e84a1647ceaa035327fc3d8989accfd
DIFF: 
https://github.com/llvm/llvm-project/commit/d8dece650e84a1647ceaa035327fc3d8989accfd.diff

LOG: [clang-tidy] Fix `DefaultHungarianPrefix` for incomplete classes in 
`readability-identifier-naming` (#215734)

Treat `DefaultHungarianPrefix` as a valid
`readability-identifier-naming` option and check that a class has a
definition before calling `isAbstract()` to compute its Hungarian
prefix.

Closes #215732

Added: 
    

Modified: 
    clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
    clang-tools-extra/docs/ReleaseNotes.md
    
clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming/hungarian-notation1/.clang-tidy
    
clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-hungarian-notation.cpp

Removed: 
    


################################################################################
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 e181a7d22a948..f72beb0810b19 100644
--- a/clang-tools-extra/docs/ReleaseNotes.md
+++ b/clang-tools-extra/docs/ReleaseNotes.md
@@ -138,6 +138,15 @@ infrastructure are described first, followed by 
tool-specific sections.
   `std::initializer_list` constructor, as the braced form could select a
   
diff erent 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(); };


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

Reply via email to