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

Reply via email to