Author: Purna Chandra
Date: 2026-09-23T13:41:17+08:00
New Revision: 85fca8f1f49103bd709e33a308356c67f04de2be

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

LOG: [clang-tidy] Fix crash in readability-identifier-naming (#220221)

This PR contains the fix for the `readability-identifier-naming` crash.
The crash happens because the checker calls `hasMemberName` on a base
class without checking if that base class actually has a definition
first (like when it's just forward-declared). I added a
`RD->hasDefinition()` guard to fix it.

Fixes #213948

Added: 
    

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

Removed: 
    


################################################################################
diff  --git 
a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp 
b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
index 279a7f8df5abf..396dcc57139d2 100644
--- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
@@ -1279,7 +1279,7 @@ StyleKind IdentifierNamingCheck::findStyleKind(
     // necessary even if it's not an override. e.g. CRTP.
     for (const CXXBaseSpecifier &Base : Decl->getParent()->bases())
       if (const auto *RD = Base.getType()->getAsCXXRecordDecl();
-          RD && RD->hasMemberName(Decl->getDeclName()))
+          RD && RD->hasDefinition() && RD->hasMemberName(Decl->getDeclName()))
         return SK_Invalid;
 
     if (Decl->isConstexpr() && NamingStyles[SK_ConstexprMethod])

diff  --git a/clang-tools-extra/docs/ReleaseNotes.md 
b/clang-tools-extra/docs/ReleaseNotes.md
index 4973bef42e3bf..833638a47abc6 100644
--- a/clang-tools-extra/docs/ReleaseNotes.md
+++ b/clang-tools-extra/docs/ReleaseNotes.md
@@ -270,6 +270,8 @@ infrastructure are described first, followed by 
tool-specific sections.
 - Improved {doc}`readability-identifier-naming
   <clang-tidy/checks/readability/identifier-naming>` check:
 
+  - Fixed a crash when a class inherits from a forward-declared base class.
+
   - Fixed a crash when checking forward-declared classes with
     {option}`DefaultHungarianPrefix` enabled.
 

diff  --git 
a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp 
b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp
index d00235aa6f28f..a4b86e6f4af10 100644
--- 
a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp
@@ -836,3 +836,11 @@ Some_struct g_s1{ .SomeMember = 1 };
 // CHECK-FIXES: Some_struct g_s1{ .some_member = 1 };
 Some_struct g_s2{.SomeMember=1};
 // CHECK-FIXES: Some_struct g_s2{.some_member=1};
+
+template<class t_t>
+struct X {
+  struct B;
+  struct A : public B {
+    virtual void v_Foo() { }
+  };
+};


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

Reply via email to