https://github.com/Decodetalkers updated https://github.com/llvm/llvm-project/pull/200001
>From 4000c1b315e1547d55cde0b98c1bc56383a31933 Mon Sep 17 00:00:00 2001 From: ShootingStarDragons <[email protected]> Date: Thu, 28 May 2026 00:16:49 +0900 Subject: [PATCH 1/2] feat: allow modules work for gcc Remove the command options which is for gcc, and this will erase the wrong error when using gcc, and make modules work --- clang-tools-extra/clangd/CompileCommands.cpp | 26 ++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/clang-tools-extra/clangd/CompileCommands.cpp b/clang-tools-extra/clangd/CompileCommands.cpp index 4eda330716f21..aa7234bf06853 100644 --- a/clang-tools-extra/clangd/CompileCommands.cpp +++ b/clang-tools-extra/clangd/CompileCommands.cpp @@ -327,6 +327,32 @@ void CommandMangler::operator()(tooling::CompileCommand &Command, return Elem.starts_with("--save-temps") || Elem.starts_with("-save-temps"); }); + llvm::erase_if(Cmd, [](llvm::StringRef FModuleTs) { + return FModuleTs == "-fmodules-ts"; + }); + + llvm::erase_if(Cmd, [](llvm::StringRef MnoDirectExternalAccess) { + return MnoDirectExternalAccess == "-mno-direct-extern-access"; + }); + + // NOTE: now clang++ cannot understand fdeps* flags, so we remove it this time + // After clang++ can understand it, remove these lines + llvm::erase_if(Cmd, [](llvm::StringRef FDepFormat) { + return FDepFormat.starts_with("-fdeps-format="); + }); + + llvm::erase_if(Cmd, [](llvm::StringRef FdepsOutput) { + return FdepsOutput.starts_with("-fdeps-output="); + }); + + llvm::erase_if(Cmd, [](llvm::StringRef FdepsTarget) { + return FdepsTarget.starts_with("-fdeps-target="); + }); + + llvm::erase_if(Cmd, [](llvm::StringRef Elm) { + return Elm.starts_with("-fmodule-mapper="); + }); + std::vector<std::string> ToAppend; if (ResourceDir && !HasExact("-resource-dir") && !HasPrefix("-resource-dir=")) ToAppend.push_back(("-resource-dir=" + *ResourceDir)); >From 0bc6c4b4c7539f7740ef8d4c430333a7e653eb35 Mon Sep 17 00:00:00 2001 From: ShootingStarDragons <[email protected]> Date: Fri, 5 Jun 2026 17:32:43 +0900 Subject: [PATCH 2/2] chore: emit warning when unsupported gcc flags are detected And if clang supports these flags in the feature, the relative logic should be removed --- clang-tools-extra/clangd/CompileCommands.cpp | 35 ++++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/clang-tools-extra/clangd/CompileCommands.cpp b/clang-tools-extra/clangd/CompileCommands.cpp index aa7234bf06853..11decb77cde1f 100644 --- a/clang-tools-extra/clangd/CompileCommands.cpp +++ b/clang-tools-extra/clangd/CompileCommands.cpp @@ -327,8 +327,11 @@ void CommandMangler::operator()(tooling::CompileCommand &Command, return Elem.starts_with("--save-temps") || Elem.starts_with("-save-temps"); }); - llvm::erase_if(Cmd, [](llvm::StringRef FModuleTs) { - return FModuleTs == "-fmodules-ts"; + bool GccUnsupportedFlag = false; + llvm::erase_if(Cmd, [&](llvm::StringRef FModuleTs) { + bool FModuleTSExists = FModuleTs == "-fmodules-ts"; + GccUnsupportedFlag |= FModuleTSExists; + return FModuleTSExists; }); llvm::erase_if(Cmd, [](llvm::StringRef MnoDirectExternalAccess) { @@ -337,22 +340,34 @@ void CommandMangler::operator()(tooling::CompileCommand &Command, // NOTE: now clang++ cannot understand fdeps* flags, so we remove it this time // After clang++ can understand it, remove these lines - llvm::erase_if(Cmd, [](llvm::StringRef FDepFormat) { - return FDepFormat.starts_with("-fdeps-format="); + llvm::erase_if(Cmd, [&](llvm::StringRef FDepFormat) { + bool FDepsFormatExists = FDepFormat.starts_with("-fdeps-format="); + GccUnsupportedFlag |= FDepsFormatExists; + return FDepsFormatExists; }); - llvm::erase_if(Cmd, [](llvm::StringRef FdepsOutput) { - return FdepsOutput.starts_with("-fdeps-output="); + llvm::erase_if(Cmd, [&](llvm::StringRef FdepsOutput) { + bool FDepsOutputExists = FdepsOutput.starts_with("-fdeps-output="); + GccUnsupportedFlag |= FDepsOutputExists; + return FDepsOutputExists; }); - llvm::erase_if(Cmd, [](llvm::StringRef FdepsTarget) { - return FdepsTarget.starts_with("-fdeps-target="); + llvm::erase_if(Cmd, [&](llvm::StringRef FdepsTarget) { + bool DefTargetExists = FdepsTarget.starts_with("-fdeps-target="); + GccUnsupportedFlag |= DefTargetExists; + return DefTargetExists; }); - llvm::erase_if(Cmd, [](llvm::StringRef Elm) { - return Elm.starts_with("-fmodule-mapper="); + llvm::erase_if(Cmd, [&](llvm::StringRef Elm) { + bool GccMapperExists = Elm.starts_with("-fmodule-mapper="); + GccUnsupportedFlag |= GccMapperExists; + return GccMapperExists; }); + if (GccUnsupportedFlag) { + log("Warning: detected unsupported gcc Flags. Remove them this time"); + } + std::vector<std::string> ToAppend; if (ResourceDir && !HasExact("-resource-dir") && !HasPrefix("-resource-dir=")) ToAppend.push_back(("-resource-dir=" + *ResourceDir)); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
