PiotrZSL created this revision.
PiotrZSL added reviewers: carlosgalvezp, njames93.
Herald added a subscriber: xazax.hun.
Herald added a project: All.
PiotrZSL requested review of this revision.
Herald added a project: clang-tools-extra.
Herald added a subscriber: cfe-commits.
Issue were cased by checking if canonical declaration of record is a
definition. Unfortunetly when forward declarations were used, it were
not a definition. Changed to use hasDefinition instead.
Fixes: #64463
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D157190
Files:
clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp
Index:
clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp
+++ clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp
@@ -707,3 +707,13 @@
task ImplicitDeclTest(async_obj &a_object) {
co_await a_object; // CHECK-MESSAGES-NOT: warning: invalid case style for
local variable
}
+
+// Test scenario when canonical declaration will be a forward declaration
+class class_with_forward_decl;
+// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for class
'class_with_forward_decl' [readability-identifier-naming]
+// CHECK-FIXES: {{^}}class CClassWithForwardDecl;
+// CHECK-FIXES: {{^}}class CClassWithForwardDecl {
+class class_with_forward_decl {
+ int __value;
+};
+
Index: clang-tools-extra/docs/ReleaseNotes.rst
===================================================================
--- clang-tools-extra/docs/ReleaseNotes.rst
+++ clang-tools-extra/docs/ReleaseNotes.rst
@@ -163,6 +163,10 @@
<clang-tidy/checks/bugprone/reserved-identifier>`, so that it does not warn
on macros starting with underscore and lowercase letter.
+- Improved the :doc:`readability-identifier-naming
+ <clang-tidy/checks/readability/identifier-naming>` check to emit proper
+ warnings when a type forward declaration precedes its definition.
+
Removed checks
^^^^^^^^^^^^^^
Index: clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
===================================================================
--- clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
+++ clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
@@ -1137,14 +1137,10 @@
}
if (const auto *Decl = dyn_cast<CXXRecordDecl>(D)) {
- if (Decl->isAnonymousStructOrUnion())
+ if (Decl->isAnonymousStructOrUnion() || !Decl->hasDefinition())
return SK_Invalid;
- if (!Decl->getCanonicalDecl()->isThisDeclarationADefinition())
- return SK_Invalid;
-
- if (Decl->hasDefinition() && Decl->isAbstract() &&
- NamingStyles[SK_AbstractClass])
+ if (Decl->isAbstract() && NamingStyles[SK_AbstractClass])
return SK_AbstractClass;
if (Decl->isStruct() && NamingStyles[SK_Struct])
Index: clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp
+++ clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp
@@ -707,3 +707,13 @@
task ImplicitDeclTest(async_obj &a_object) {
co_await a_object; // CHECK-MESSAGES-NOT: warning: invalid case style for local variable
}
+
+// Test scenario when canonical declaration will be a forward declaration
+class class_with_forward_decl;
+// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for class 'class_with_forward_decl' [readability-identifier-naming]
+// CHECK-FIXES: {{^}}class CClassWithForwardDecl;
+// CHECK-FIXES: {{^}}class CClassWithForwardDecl {
+class class_with_forward_decl {
+ int __value;
+};
+
Index: clang-tools-extra/docs/ReleaseNotes.rst
===================================================================
--- clang-tools-extra/docs/ReleaseNotes.rst
+++ clang-tools-extra/docs/ReleaseNotes.rst
@@ -163,6 +163,10 @@
<clang-tidy/checks/bugprone/reserved-identifier>`, so that it does not warn
on macros starting with underscore and lowercase letter.
+- Improved the :doc:`readability-identifier-naming
+ <clang-tidy/checks/readability/identifier-naming>` check to emit proper
+ warnings when a type forward declaration precedes its definition.
+
Removed checks
^^^^^^^^^^^^^^
Index: clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
===================================================================
--- clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
+++ clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
@@ -1137,14 +1137,10 @@
}
if (const auto *Decl = dyn_cast<CXXRecordDecl>(D)) {
- if (Decl->isAnonymousStructOrUnion())
+ if (Decl->isAnonymousStructOrUnion() || !Decl->hasDefinition())
return SK_Invalid;
- if (!Decl->getCanonicalDecl()->isThisDeclarationADefinition())
- return SK_Invalid;
-
- if (Decl->hasDefinition() && Decl->isAbstract() &&
- NamingStyles[SK_AbstractClass])
+ if (Decl->isAbstract() && NamingStyles[SK_AbstractClass])
return SK_AbstractClass;
if (Decl->isStruct() && NamingStyles[SK_Struct])
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits