Author: Michael Spencer Date: 2021-12-14T11:21:42-07:00 New Revision: 04192422c4e3b730c580498b8e948088cb15580b
URL: https://github.com/llvm/llvm-project/commit/04192422c4e3b730c580498b8e948088cb15580b DIFF: https://github.com/llvm/llvm-project/commit/04192422c4e3b730c580498b8e948088cb15580b.diff LOG: [Clang][ScanDeps] Use the virtual path for module maps Make clang-scan-deps use the virtual path for module maps instead of the on disk path. This is needed so that modulemap relative lookups are done correctly in the actual module builds. The file dependencies still use the on disk path as that's what matters for build invalidation. Differential Revision: https://reviews.llvm.org/D114206 Added: clang/test/ClangScanDeps/modulemap-via-vfs.m Modified: clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp Removed: ################################################################################ diff --git a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp index 9229c67c41787..086215e7a573d 100644 --- a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp +++ b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp @@ -237,7 +237,13 @@ ModuleID ModuleDepCollectorPP::handleTopLevelModule(const Module *M) { .getHeaderSearchInfo() .getModuleMap() .getModuleMapFileForUniquing(M); - MD.ClangModuleMapFile = std::string(ModuleMap ? ModuleMap->getName() : ""); + + if (ModuleMap) { + StringRef Path = ModuleMap->tryGetRealPathName(); + if (Path.empty()) + Path = ModuleMap->getName(); + MD.ClangModuleMapFile = std::string(Path); + } serialization::ModuleFile *MF = MDC.ScanInstance.getASTReader()->getModuleManager().lookup( diff --git a/clang/test/ClangScanDeps/modulemap-via-vfs.m b/clang/test/ClangScanDeps/modulemap-via-vfs.m new file mode 100644 index 0000000000000..cc152b63f4831 --- /dev/null +++ b/clang/test/ClangScanDeps/modulemap-via-vfs.m @@ -0,0 +1,56 @@ +// RUN: rm -rf %t.dir +// RUN: split-file %s %t.dir +// RUN: sed -e "s|DIR|%/t.dir|g" %t.dir/build/compile-commands.json.in > %t.dir/build/compile-commands.json +// RUN: sed -e "s|DIR|%/t.dir|g" %t.dir/build/vfs.yaml.in > %t.dir/build/vfs.yaml +// RUN: clang-scan-deps -compilation-database %t.dir/build/compile-commands.json -j 1 -format experimental-full \ +// RUN: -mode preprocess-minimized-sources -generate-modules-path-args > %t.db +// RUN: %python %S/../../utils/module-deps-to-rsp.py %t.db --module-name=A > %t.A.cc1.rsp +// RUN: cat %t.A.cc1.rsp | sed 's:\\\\\?:/:g' | FileCheck %s + +// CHECK-NOT: build/module.modulemap +// CHECK: A/module.modulemap + +//--- build/compile-commands.json.in + +[ +{ + "directory": "DIR", + "command": "clang DIR/main.m -Imodules/A -fmodules -fmodules-cache-path=module-cache -fimplicit-modules -fimplicit-module-maps -ivfsoverlay build/vfs.yaml", + "file": "DIR/main.m" +} +] + +//--- build/module.modulemap + +module A { + umbrella header "A.h" +} + +//--- modules/A/A.h + +typedef int A_t; + +//--- build/vfs.yaml.in + +{ + "version": 0, + "case-sensitive": "false", + "roots": [ + { + "contents": [ + { + "external-contents": "DIR/build/module.modulemap", + "name": "module.modulemap", + "type": "file" + }], + "name": "DIR/modules/A", + "type": "directory" + } + ] +} + +//--- main.m + +@import A; + +A_t a = 0; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits