[PATCH] D141495: [clangd] Suppress clang-tidy warnings for code spelled in system macros
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 11 06:47:21 PST 2023
sammccall created this revision.
sammccall added a reviewer: kadircet.
Herald added a subscriber: arphaman.
Herald added a reviewer: njames93.
Herald added a project: All.
sammccall requested review of this revision.
Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov.
Herald added a project: clang-tools-extra.
This aligns with the default behavior of clang-tidy (which we offer no
way to override).
Fixes https://github.com/clangd/clangd/issues/1448
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D141495
Files:
clang-tools-extra/clangd/ParsedAST.cpp
clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp
Index: clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp
+++ clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp
@@ -527,6 +527,37 @@
diagName("bugprone-integer-division")))));
}
+TEST(DiagnosticTest, ClangTidySystemMacro) {
+ Annotations Main(R"cpp(
+ #include "user.h"
+ #include "system.h"
+ int i = 3;
+ double x = $inline[[8]] / i;
+ double y = $user[[DIVIDE_USER]](i);
+ double z = DIVIDE_SYS(i);
+ )cpp");
+
+ auto TU = TestTU::withCode(Main.code());
+ TU.AdditionalFiles["user.h"] = R"cpp(
+ #define DIVIDE_USER(Y) 8/Y
+ )cpp";
+ TU.AdditionalFiles["system.h"] = R"cpp(
+ #pragma clang system_header
+ #define DIVIDE_SYS(Y) 8/Y
+ )cpp";
+
+ TU.ClangTidyProvider = addTidyChecks("bugprone-integer-division");
+ std::string BadDivision = "result of integer division used in a floating "
+ "point context; possible loss of precision";
+
+ // Expect to see warning from user macros, but not system macros.
+ // This matches clang-tidy --system-headers=0 (the default).
+ EXPECT_THAT(*TU.build().getDiagnostics(),
+ ifTidyChecks(
+ UnorderedElementsAre(Diag(Main.range("inline"), BadDivision),
+ Diag(Main.range("user"), BadDivision))));
+}
+
TEST(DiagnosticTest, ClangTidyWarningAsError) {
Annotations Main(R"cpp(
int main() {
Index: clang-tools-extra/clangd/ParsedAST.cpp
===================================================================
--- clang-tools-extra/clangd/ParsedAST.cpp
+++ clang-tools-extra/clangd/ParsedAST.cpp
@@ -11,7 +11,6 @@
#include "../clang-tidy/ClangTidyDiagnosticConsumer.h"
#include "../clang-tidy/ClangTidyModuleRegistry.h"
#include "AST.h"
-#include "ASTSignals.h"
#include "Compiler.h"
#include "Config.h"
#include "Diagnostics.h"
@@ -543,6 +542,10 @@
// NOLINT comments)?
return DiagnosticsEngine::Ignored;
}
+ // Match behavior for clang-tidy --system-headers=0 (the default).
+ if (Info.hasSourceManager() &&
+ Info.getSourceManager().isInSystemMacro(Info.getLocation()))
+ return DiagnosticsEngine::Ignored;
// Check for warning-as-error.
if (DiagLevel == DiagnosticsEngine::Warning &&
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D141495.488194.patch
Type: text/x-patch
Size: 2427 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230111/c7724b52/attachment.bin>
More information about the cfe-commits
mailing list