[clang-tools-extra] Revert "[clangd] [Modules] Fixes to correctly handle module dependencies" (PR #142162)
via cfe-commits
cfe-commits at lists.llvm.org
Fri May 30 07:45:21 PDT 2025
https://github.com/fleeting-xx created https://github.com/llvm/llvm-project/pull/142162
Reverts llvm/llvm-project#142090 due to build failures on [arm64 windows](https://lab.llvm.org/buildbot/#/builders/161).
I'll need someone with commit permission to apply this revert.
>From 39fe26a200155bad4992bcc6f430ffa5b4cace77 Mon Sep 17 00:00:00 2001
From: fleeting-xx <bakerdt at gmail.com>
Date: Fri, 30 May 2025 09:42:33 -0500
Subject: [PATCH] =?UTF-8?q?Revert=20"[clangd]=20[Modules]=20Fixes=20to=20c?=
=?UTF-8?q?orrectly=20handle=20module=20dependencies=20(#14=E2=80=A6"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This reverts commit d490526a81586c7b2fe674ce520276570c9881e2.
---
clang-tools-extra/clangd/ModulesBuilder.cpp | 27 +++---
.../clangd/test/module_dependencies.test | 92 -------------------
clang-tools-extra/clangd/test/modules.test | 10 +-
3 files changed, 18 insertions(+), 111 deletions(-)
delete mode 100644 clang-tools-extra/clangd/test/module_dependencies.test
diff --git a/clang-tools-extra/clangd/ModulesBuilder.cpp b/clang-tools-extra/clangd/ModulesBuilder.cpp
index 786fb88dbe318..bf77f43bd28bb 100644
--- a/clang-tools-extra/clangd/ModulesBuilder.cpp
+++ b/clang-tools-extra/clangd/ModulesBuilder.cpp
@@ -84,7 +84,8 @@ class FailedPrerequisiteModules : public PrerequisiteModules {
// We shouldn't adjust the compilation commands based on
// FailedPrerequisiteModules.
- void adjustHeaderSearchOptions(HeaderSearchOptions &Options) const override {}
+ void adjustHeaderSearchOptions(HeaderSearchOptions &Options) const override {
+ }
// FailedPrerequisiteModules can never be reused.
bool
@@ -429,21 +430,21 @@ class CachingProjectModules : public ProjectModules {
/// Collect the directly and indirectly required module names for \param
/// ModuleName in topological order. The \param ModuleName is guaranteed to
/// be the last element in \param ModuleNames.
-llvm::SmallVector<std::string> getAllRequiredModules(PathRef RequiredSource,
- CachingProjectModules &MDB,
- StringRef ModuleName) {
- llvm::SmallVector<std::string> ModuleNames;
+llvm::SmallVector<StringRef> getAllRequiredModules(PathRef RequiredSource,
+ CachingProjectModules &MDB,
+ StringRef ModuleName) {
+ llvm::SmallVector<llvm::StringRef> ModuleNames;
llvm::StringSet<> ModuleNamesSet;
auto VisitDeps = [&](StringRef ModuleName, auto Visitor) -> void {
ModuleNamesSet.insert(ModuleName);
- for (const std::string &RequiredModuleName : MDB.getRequiredModules(
+ for (StringRef RequiredModuleName : MDB.getRequiredModules(
MDB.getSourceForModuleName(ModuleName, RequiredSource)))
if (ModuleNamesSet.insert(RequiredModuleName).second)
Visitor(RequiredModuleName, Visitor);
- ModuleNames.push_back(ModuleName.str());
+ ModuleNames.push_back(ModuleName);
};
VisitDeps(ModuleName, VisitDeps);
@@ -493,13 +494,13 @@ llvm::Error ModulesBuilder::ModulesBuilderImpl::getOrBuildModuleFile(
// Get Required modules in topological order.
auto ReqModuleNames = getAllRequiredModules(RequiredSource, MDB, ModuleName);
for (llvm::StringRef ReqModuleName : ReqModuleNames) {
- if (BuiltModuleFiles.isModuleUnitBuilt(ReqModuleName))
+ if (BuiltModuleFiles.isModuleUnitBuilt(ModuleName))
continue;
if (auto Cached = Cache.getModule(ReqModuleName)) {
if (IsModuleFileUpToDate(Cached->getModuleFilePath(), BuiltModuleFiles,
TFS.view(std::nullopt))) {
- log("Reusing module {0} from {1}", ReqModuleName,
+ log("Reusing module {0} from {1}", ModuleName,
Cached->getModuleFilePath());
BuiltModuleFiles.addModuleFile(std::move(Cached));
continue;
@@ -507,16 +508,14 @@ llvm::Error ModulesBuilder::ModulesBuilderImpl::getOrBuildModuleFile(
Cache.remove(ReqModuleName);
}
- std::string ReqFileName =
- MDB.getSourceForModuleName(ReqModuleName, RequiredSource);
llvm::Expected<ModuleFile> MF = buildModuleFile(
- ReqModuleName, ReqFileName, getCDB(), TFS, BuiltModuleFiles);
+ ModuleName, ModuleUnitFileName, getCDB(), TFS, BuiltModuleFiles);
if (llvm::Error Err = MF.takeError())
return Err;
- log("Built module {0} to {1}", ReqModuleName, MF->getModuleFilePath());
+ log("Built module {0} to {1}", ModuleName, MF->getModuleFilePath());
auto BuiltModuleFile = std::make_shared<const ModuleFile>(std::move(*MF));
- Cache.add(ReqModuleName, BuiltModuleFile);
+ Cache.add(ModuleName, BuiltModuleFile);
BuiltModuleFiles.addModuleFile(std::move(BuiltModuleFile));
}
diff --git a/clang-tools-extra/clangd/test/module_dependencies.test b/clang-tools-extra/clangd/test/module_dependencies.test
deleted file mode 100644
index ee1df7f8a35cc..0000000000000
--- a/clang-tools-extra/clangd/test/module_dependencies.test
+++ /dev/null
@@ -1,92 +0,0 @@
-# A smoke test to check that a simple dependency chain for modules can work.
-#
-# RUN: rm -fr %t
-# RUN: mkdir -p %t
-# RUN: split-file %s %t
-#
-# RUN: sed -e "s|DIR|%/t|g" %t/compile_commands.json.tmpl > %t/compile_commands.json.tmp
-# RUN: sed -e "s|CLANG_CC|%clang|g" %t/compile_commands.json.tmp > %t/compile_commands.json
-# RUN: sed -e "s|DIR|%/t|g" %t/definition.jsonrpc.tmpl > %t/definition.jsonrpc.tmp
-#
-# On Windows, we need the URI in didOpen to look like "uri":"file:///C:/..."
-# (with the extra slash in the front), so we add it here.
-# RUN: sed -E -e 's|"file://([A-Z]):/|"file:///\1:/|g' %/t/definition.jsonrpc.tmp > %/t/definition.jsonrpc
-#
-# RUN: clangd -experimental-modules-support -lit-test < %t/definition.jsonrpc \
-# RUN: | FileCheck -strict-whitespace %t/definition.jsonrpc
-
-#--- A-frag.cppm
-export module A:frag;
-export void printA() {}
-
-#--- A.cppm
-export module A;
-export import :frag;
-
-#--- Use.cpp
-import A;
-void foo() {
- print
-}
-
-#--- compile_commands.json.tmpl
-[
- {
- "directory": "DIR",
- "command": "CLANG_CC -fprebuilt-module-path=DIR -std=c++20 -o DIR/main.cpp.o -c DIR/Use.cpp",
- "file": "DIR/Use.cpp"
- },
- {
- "directory": "DIR",
- "command": "CLANG_CC -std=c++20 DIR/A.cppm --precompile -o DIR/A.pcm",
- "file": "DIR/A.cppm"
- },
- {
- "directory": "DIR",
- "command": "CLANG_CC -std=c++20 DIR/A-frag.cppm --precompile -o DIR/A-frag.pcm",
- "file": "DIR/A-frag.cppm"
- }
-]
-
-#--- definition.jsonrpc.tmpl
-{
- "jsonrpc": "2.0",
- "id": 0,
- "method": "initialize",
- "params": {
- "processId": 123,
- "rootPath": "clangd",
- "capabilities": {
- "textDocument": {
- "completion": {
- "completionItem": {
- "snippetSupport": true
- }
- }
- }
- },
- "trace": "off"
- }
-}
----
-{
- "jsonrpc": "2.0",
- "method": "textDocument/didOpen",
- "params": {
- "textDocument": {
- "uri": "file://DIR/Use.cpp",
- "languageId": "cpp",
- "version": 1,
- "text": "import A;\nvoid foo() {\n print\n}\n"
- }
- }
-}
-
-# CHECK: "message"{{.*}}printA{{.*}}(fix available)
-
----
-{"jsonrpc":"2.0","id":1,"method":"textDocument/completion","params":{"textDocument":{"uri":"file://DIR/Use.cpp"},"context":{"triggerKind":1},"position":{"line":2,"character":6}}}
----
-{"jsonrpc":"2.0","id":2,"method":"shutdown"}
----
-{"jsonrpc":"2.0","method":"exit"}
diff --git a/clang-tools-extra/clangd/test/modules.test b/clang-tools-extra/clangd/test/modules.test
index 6792352bb8e56..74280811a6cff 100644
--- a/clang-tools-extra/clangd/test/modules.test
+++ b/clang-tools-extra/clangd/test/modules.test
@@ -1,16 +1,16 @@
# A smoke test to check the modules can work basically.
#
+# Windows have different escaping modes.
+# FIXME: We should add one for windows.
+# UNSUPPORTED: system-windows
+#
# RUN: rm -fr %t
# RUN: mkdir -p %t
# RUN: split-file %s %t
#
# RUN: sed -e "s|DIR|%/t|g" %t/compile_commands.json.tmpl > %t/compile_commands.json.tmp
# RUN: sed -e "s|CLANG_CC|%clang|g" %t/compile_commands.json.tmp > %t/compile_commands.json
-# RUN: sed -e "s|DIR|%/t|g" %t/definition.jsonrpc.tmpl > %t/definition.jsonrpc.tmp
-#
-# On Windows, we need the URI in didOpen to look like "uri":"file:///C:/..."
-# (with the extra slash in the front), so we add it here.
-# RUN: sed -E -e 's|"file://([A-Z]):/|"file:///\1:/|g' %/t/definition.jsonrpc.tmp > %/t/definition.jsonrpc
+# RUN: sed -e "s|DIR|%/t|g" %t/definition.jsonrpc.tmpl > %t/definition.jsonrpc
#
# RUN: clangd -experimental-modules-support -lit-test < %t/definition.jsonrpc \
# RUN: | FileCheck -strict-whitespace %t/definition.jsonrpc
More information about the cfe-commits
mailing list