[clang-tools-extra] [libc] Update libc namespace clang-tidy checks (PR #98424)
Paul Kirth via cfe-commits
cfe-commits at lists.llvm.org
Thu Jul 11 08:14:42 PDT 2024
================
@@ -30,20 +30,35 @@ void ImplementationInNamespaceCheck::check(
const auto *MatchedDecl =
Result.Nodes.getNodeAs<Decl>("child_of_translation_unit");
const auto *NS = dyn_cast<NamespaceDecl>(MatchedDecl);
+
+ // LLVM libc declarations should be inside of a non-anonymous namespace.
if (NS == nullptr || NS->isAnonymousNamespace()) {
diag(MatchedDecl->getLocation(),
"declaration must be enclosed within the '%0' namespace")
- << RequiredNamespaceMacroName;
+ << RequiredNamespaceDeclMacroName;
return;
}
+
+ // Enforce that the namespace is the result of macro expansion
if (Result.SourceManager->isMacroBodyExpansion(NS->getLocation()) == false) {
diag(NS->getLocation(), "the outermost namespace should be the '%0' macro")
- << RequiredNamespaceMacroName;
+ << RequiredNamespaceDeclMacroName;
return;
}
- if (NS->getName().starts_with(RequiredNamespaceStart) == false) {
+
+ // We want the macro to have [[gnu::visibility("hidden")]] as a prefix, but
+ // visibility is just an attribute in the AST construct, so we check that
+ // instead.
+ if (NS->getVisibility() != Visibility::HiddenVisibility) {
diag(NS->getLocation(), "the '%0' macro should start with '%1'")
- << RequiredNamespaceMacroName << RequiredNamespaceStart;
+ << RequiredNamespaceDeclMacroName << RequiredNamespaceDeclStart;
+ return;
+ }
+
+ // Lastly, make sure the namespace name actually has the __llvm_libc prefix
+ if (NS->getName().starts_with(RequiredNamespaceRefStart) == false) {
----------------
ilovepi wrote:
Oh, good catch! Let me update this.
https://github.com/llvm/llvm-project/pull/98424
More information about the cfe-commits
mailing list