[clang-tools-extra] [clangd][modules] Remove the options when driver detects that it was unsupported, and log them (PR #200001)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Jun 5 07:50:12 PDT 2026
https://github.com/Decodetalkers updated https://github.com/llvm/llvm-project/pull/200001
>From 396773dda01539d0a03655b24c448d66629078fc Mon Sep 17 00:00:00 2001
From: ShootingStarDragons <ShootingStarDragons at protonmail.com>
Date: Fri, 5 Jun 2026 21:48:39 +0900
Subject: [PATCH 1/2] feat: remove unsupported compile options when driver
detects them
and log the unsupported options to the editor
---
clang-tools-extra/clangd/CompileCommands.cpp | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/clang-tools-extra/clangd/CompileCommands.cpp b/clang-tools-extra/clangd/CompileCommands.cpp
index 4eda330716f21..1d25576a1970c 100644
--- a/clang-tools-extra/clangd/CompileCommands.cpp
+++ b/clang-tools-extra/clangd/CompileCommands.cpp
@@ -273,6 +273,21 @@ void CommandMangler::operator()(tooling::CompileCommand &Command,
SawInput(Cmd[I]);
Cmd.resize(DashDashIndex);
}
+
+ llvm::SmallVector<const char *, 16> UnknownArgs;
+
+ for (auto *UnknownArg : ArgList.filtered(options::OPT_UNKNOWN)) {
+ unsigned Index = UnknownArg->getIndex();
+ const auto *Argument = UnknownArg->getValue();
+ UnknownArgs.push_back(Argument);
+ IndicesToDrop.push_back(Index);
+ }
+
+ if (!UnknownArgs.empty()) {
+ log("Warning: detected unsupported options '{0}'",
+ llvm::join(UnknownArgs, ", "));
+ }
+
llvm::sort(IndicesToDrop);
for (unsigned Idx : llvm::reverse(IndicesToDrop))
// +1 to account for the executable name in Cmd[0] that
>From 6915b334ba13b4ea68ff8394076558a600c2b8ca Mon Sep 17 00:00:00 2001
From: ShootingStarDragons <ShootingStarDragons at protonmail.com>
Date: Fri, 5 Jun 2026 23:47:13 +0900
Subject: [PATCH 2/2] chore: add unit test for unknown flags drop
---
.../clangd/unittests/CompileCommandsTests.cpp | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp b/clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp
index 0c1e0348f68a5..55b3434ebf860 100644
--- a/clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp
+++ b/clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp
@@ -561,7 +561,18 @@ TEST(CommandMangler, ClangClStdFlags_Inference) {
EXPECT_THAT(llvm::join(Cmd.CommandLine, " "), HasSubstr("/std:c++latest"));
}
}
+TEST(CommandMangler, ClangUnknownArgs) {
+ // Check that clang-cl-specific will drop unknown flags
+ const auto Mangler = CommandMangler::forTests();
+ {
+ tooling::CompileCommand Cmd;
+ Cmd.CommandLine = {"clang-cl", "-std=c++23", "--unknown-flag=abcd.flag"};
+ Mangler(Cmd, "/Users/foo.hpp");
+ EXPECT_THAT(llvm::join(Cmd.CommandLine, " "),
+ Not(HasSubstr("--unknown-flag=abcd.flag")));
+ }
+}
} // namespace
} // namespace clangd
} // namespace clang
More information about the cfe-commits
mailing list