From: Michael Spencer Date: Thu, 6 Jan 2022 17:40:36 +0000 (+0000) Subject: Re-land "[Clang][ScanDeps] Use the virtual path for module maps" X-Git-Tag: upstream/15.0.7~21375 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=37e6e022d21fc9e188701c684dc0f6a13366ddf9;p=platform%2Fupstream%2Fllvm.git Re-land "[Clang][ScanDeps] Use the virtual path for module maps" This re-lands: - 04192422c4e3b730c580498b8e948088cb15580b - 015e08c6badad6b27404d6f94569e25c18d79049 Which I reverted in ea835171389aa356b865bf9cb72ca8f4f84b64fd in error. Differential Revision: https://reviews.llvm.org/D114206 --- diff --git a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp index 9229c67..086215e 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 0000000..b239450 --- /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=DIR/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;