[clang-tools-extra] [clang-tidy] Removed redundant-inline-specifier warning on static data members (PR #81423)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Feb 11 09:49:58 PST 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-tools-extra
Author: Félix-Antoine Constantin (felix642)
<details>
<summary>Changes</summary>
Updated the check to ignore point static data members with in class initializer since removing the inline specifier would generate a compilation error
Fixes #<!-- -->80684
---
Full diff: https://github.com/llvm/llvm-project/pull/81423.diff
3 Files Affected:
- (modified) clang-tools-extra/clang-tidy/readability/RedundantInlineSpecifierCheck.cpp (+11-6)
- (modified) clang-tools-extra/docs/ReleaseNotes.rst (+4)
- (modified) clang-tools-extra/test/clang-tidy/checkers/readability/redundant-inline-specifier.cpp (+14)
``````````diff
diff --git a/clang-tools-extra/clang-tidy/readability/RedundantInlineSpecifierCheck.cpp b/clang-tools-extra/clang-tidy/readability/RedundantInlineSpecifierCheck.cpp
index 0e8d17d4442478..3d6b052686c20c 100644
--- a/clang-tools-extra/clang-tidy/readability/RedundantInlineSpecifierCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/RedundantInlineSpecifierCheck.cpp
@@ -47,6 +47,9 @@ AST_POLYMORPHIC_MATCHER_P(isInternalLinkage,
return VD->isInAnonymousNamespace();
llvm_unreachable("Not a valid polymorphic type");
}
+
+AST_MATCHER(clang::VarDecl, hasInitialization) { return Node.hasInit(); }
+
} // namespace
static SourceLocation getInlineTokenLocation(SourceRange RangeLocation,
@@ -88,12 +91,14 @@ void RedundantInlineSpecifierCheck::registerMatchers(MatchFinder *Finder) {
this);
if (getLangOpts().CPlusPlus17) {
- Finder->addMatcher(
- varDecl(isInlineSpecified(),
- anyOf(isInternalLinkage(StrictMode),
- allOf(isConstexpr(), hasAncestor(recordDecl()))))
- .bind("var_decl"),
- this);
+ const auto IsPartOfRecordDecl = hasAncestor(recordDecl());
+ Finder->addMatcher(varDecl(isInlineSpecified(),
+ anyOf(allOf(isInternalLinkage(StrictMode),
+ unless(allOf(hasInitialization(),
+ IsPartOfRecordDecl))),
+ allOf(isConstexpr(), IsPartOfRecordDecl)))
+ .bind("var_decl"),
+ this);
}
}
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index ee68c8f49b3df2..303bfef17015a0 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -160,6 +160,10 @@ Changes in existing checks
`AllowStringArrays` option, enabling the exclusion of array types with deduced
length initialized from string literals.
+- Improved :doc:`readability-redundant-inline-specifier
+ <clang-tidy/checks/readability/redundant-inline-specifier>` check to properly
+ emit warnings for static data member with an in-class initializer.
+
Removed checks
^^^^^^^^^^^^^^
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/redundant-inline-specifier.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/redundant-inline-specifier.cpp
index cdd98d8fdc20f5..14f9e88f7e7218 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/readability/redundant-inline-specifier.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/redundant-inline-specifier.cpp
@@ -135,3 +135,17 @@ INLINE_MACRO()
#define INLINE_KW inline
INLINE_KW void fn10() { }
+
+namespace {
+class A
+{
+public:
+ static inline float test = 3.0F;
+ static inline double test2 = 3.0;
+ static inline int test3 = 3;
+
+ static inline float test4;
+ // CHECK-MESSAGES-STRICT: :[[@LINE-1]]:10: warning: variable 'test4' has inline specifier but is implicitly inlined [readability-redundant-inline-specifier]
+ // CHECK-FIXES-STRICT: static float test4;
+};
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/81423
More information about the cfe-commits
mailing list