[clang] 76b8754 - Revert "Reapply "[clang][deps] Support inferred modules""
Frederik Gossen via cfe-commits
cfe-commits at lists.llvm.org
Wed May 19 10:22:08 PDT 2021
Author: Frederik Gossen
Date: 2021-05-19T19:19:37+02:00
New Revision: 76b8754d1bba6a8490c0f7e8a9e2fb3d181f0b03
URL: https://github.com/llvm/llvm-project/commit/76b8754d1bba6a8490c0f7e8a9e2fb3d181f0b03
DIFF: https://github.com/llvm/llvm-project/commit/76b8754d1bba6a8490c0f7e8a9e2fb3d181f0b03.diff
LOG: Revert "Reapply "[clang][deps] Support inferred modules""
This reverts commit c98833cdaad01787ea70ecdfabb05a7e142a6671.
The test `ClangScanDeps/modules-inferred-explicit-build.m` creates files
in the current directory.
Added:
Modified:
clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
clang/test/ClangScanDeps/modules-full.cpp
Removed:
clang/test/ClangScanDeps/Inputs/frameworks/Inferred.framework/Frameworks/Sub.framework/Headers/Sub.h
clang/test/ClangScanDeps/Inputs/frameworks/Inferred.framework/Headers/Inferred.h
clang/test/ClangScanDeps/Inputs/frameworks/System.framework/Headers/System.h
clang/test/ClangScanDeps/Inputs/frameworks/System.framework/Modules/module.modulemap
clang/test/ClangScanDeps/Inputs/frameworks/module.modulemap
clang/test/ClangScanDeps/Inputs/modules_inferred_cdb.json
clang/test/ClangScanDeps/modules-inferred-explicit-build.m
clang/test/ClangScanDeps/modules-inferred.m
clang/utils/module-deps-to-rsp.py
################################################################################
diff --git a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
index d9e0bead13bc..51b7fc48628c 100644
--- a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
+++ b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp
@@ -33,6 +33,7 @@ makeInvocationForModuleBuildWithoutPaths(const ModuleDeps &Deps,
CI.getFrontendOpts().IsSystemModule = Deps.IsSystem;
CI.getLangOpts()->ImplicitModules = false;
+ CI.getHeaderSearchOpts().ImplicitModuleMaps = false;
return CI;
}
@@ -178,22 +179,13 @@ ModuleID ModuleDepCollectorPP::handleTopLevelModule(const Module *M) {
const FileEntry *ModuleMap = Instance.getPreprocessor()
.getHeaderSearchInfo()
.getModuleMap()
- .getModuleMapFileForUniquing(M);
+ .getContainingModuleMapFile(M);
MD.ClangModuleMapFile = std::string(ModuleMap ? ModuleMap->getName() : "");
serialization::ModuleFile *MF =
MDC.Instance.getASTReader()->getModuleManager().lookup(M->getASTFile());
MDC.Instance.getASTReader()->visitInputFiles(
*MF, true, true, [&](const serialization::InputFile &IF, bool isSystem) {
- // __inferred_module.map is the result of the way in which an implicit
- // module build handles inferred modules. It adds an overlay VFS with
- // this file in the proper directory and relies on the rest of Clang to
- // handle it like normal. With explicitly built modules we don't need
- // to play VFS tricks, so replace it with the correct module map.
- if (IF.getFile()->getName().endswith("__inferred_module.map")) {
- MD.FileDeps.insert(ModuleMap->getName());
- return;
- }
MD.FileDeps.insert(IF.getFile()->getName());
});
diff --git a/clang/test/ClangScanDeps/Inputs/frameworks/Inferred.framework/Frameworks/Sub.framework/Headers/Sub.h b/clang/test/ClangScanDeps/Inputs/frameworks/Inferred.framework/Frameworks/Sub.framework/Headers/Sub.h
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/clang/test/ClangScanDeps/Inputs/frameworks/Inferred.framework/Headers/Inferred.h b/clang/test/ClangScanDeps/Inputs/frameworks/Inferred.framework/Headers/Inferred.h
deleted file mode 100644
index 1855e4fad5f8..000000000000
--- a/clang/test/ClangScanDeps/Inputs/frameworks/Inferred.framework/Headers/Inferred.h
+++ /dev/null
@@ -1 +0,0 @@
-typedef int inferred;
diff --git a/clang/test/ClangScanDeps/Inputs/frameworks/System.framework/Headers/System.h b/clang/test/ClangScanDeps/Inputs/frameworks/System.framework/Headers/System.h
deleted file mode 100644
index a90c62886749..000000000000
--- a/clang/test/ClangScanDeps/Inputs/frameworks/System.framework/Headers/System.h
+++ /dev/null
@@ -1 +0,0 @@
-enum { bigger_than_int = 0x80000000 };
diff --git a/clang/test/ClangScanDeps/Inputs/frameworks/System.framework/Modules/module.modulemap b/clang/test/ClangScanDeps/Inputs/frameworks/System.framework/Modules/module.modulemap
deleted file mode 100644
index 51f72f664235..000000000000
--- a/clang/test/ClangScanDeps/Inputs/frameworks/System.framework/Modules/module.modulemap
+++ /dev/null
@@ -1,3 +0,0 @@
-framework module System [system] {
- umbrella header "System.h"
-}
diff --git a/clang/test/ClangScanDeps/Inputs/frameworks/module.modulemap b/clang/test/ClangScanDeps/Inputs/frameworks/module.modulemap
deleted file mode 100644
index e3bad873c7e7..000000000000
--- a/clang/test/ClangScanDeps/Inputs/frameworks/module.modulemap
+++ /dev/null
@@ -1 +0,0 @@
-framework module * {}
diff --git a/clang/test/ClangScanDeps/Inputs/modules_inferred_cdb.json b/clang/test/ClangScanDeps/Inputs/modules_inferred_cdb.json
deleted file mode 100644
index e88dc88fa1b4..000000000000
--- a/clang/test/ClangScanDeps/Inputs/modules_inferred_cdb.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
-{
- "directory": "DIR",
- "command": "clang -E DIR/modules_cdb_input.cpp -FFRAMEWORKS -fmodules -fmodules-cache-path=DIR/module-cache -fimplicit-modules -fimplicit-module-maps -pedantic -Werror",
- "file": "DIR/modules_cdb_input.cpp"
-}
-]
diff --git a/clang/test/ClangScanDeps/modules-full.cpp b/clang/test/ClangScanDeps/modules-full.cpp
index a8d18abea41e..ebd86e79a3fb 100644
--- a/clang/test/ClangScanDeps/modules-full.cpp
+++ b/clang/test/ClangScanDeps/modules-full.cpp
@@ -48,6 +48,7 @@
// CHECK: "-emit-module"
// CHECK-NO-ABS-NOT: "-fmodule-file={{.*}}"
// CHECK-ABS: "-fmodule-file=[[PREFIX]]/module-cache{{(_clangcl)?}}/[[CONTEXT_HASH_H1]]/header2-{{[A-Z0-9]+}}.pcm"
+// CHECK-NOT: "-fimplicit-module-maps"
// CHECK: "-fmodule-name=header1"
// CHECK: "-fno-implicit-modules"
// CHECK: ],
@@ -64,6 +65,7 @@
// CHECK-NEXT: "command-line": [
// CHECK-NEXT: "-cc1",
// CHECK: "-emit-module",
+// CHECK-NOT: "-fimplicit-module-maps",
// CHECK: "-fmodule-name=header1",
// CHECK: "-fno-implicit-modules",
// CHECK: ],
@@ -80,6 +82,7 @@
// CHECK-NEXT: "command-line": [
// CHECK-NEXT: "-cc1",
// CHECK: "-emit-module",
+// CHECK-NOT: "-fimplicit-module-maps",
// CHECK: "-fmodule-name=header2",
// CHECK: "-fno-implicit-modules",
// CHECK: ],
diff --git a/clang/test/ClangScanDeps/modules-inferred-explicit-build.m b/clang/test/ClangScanDeps/modules-inferred-explicit-build.m
deleted file mode 100644
index bfc34db4214c..000000000000
--- a/clang/test/ClangScanDeps/modules-inferred-explicit-build.m
+++ /dev/null
@@ -1,22 +0,0 @@
-// RUN: rm -rf %t.dir
-// RUN: rm -rf %t.cdb
-// RUN: mkdir -p %t.dir
-// RUN: cp %s %t.dir/modules_cdb_input.cpp
-// RUN: sed -e "s|DIR|%/t.dir|g" -e "s|FRAMEWORKS|%/S/Inputs/frameworks|g" -e "s|-E|-x objective-c -E|g" \
-// RUN: %S/Inputs/modules_inferred_cdb.json > %t.cdb
-//
-// RUN: clang-scan-deps -compilation-database %t.cdb -j 1 -format experimental-full \
-// RUN: -mode preprocess-minimized-sources > %t.db
-// RUN: %python %S/../../utils/module-deps-to-rsp.py %t.db --module-name=Inferred > %t.inferred.cc1.rsp
-// RUN: %python %S/../../utils/module-deps-to-rsp.py %t.db --module-name=System > %t.system.cc1.rsp
-// RUN: %python %S/../../utils/module-deps-to-rsp.py %t.db --tu-index=0 > %t.tu.rsp
-// RUN: %clang @%t.inferred.cc1.rsp -pedantic -Werror
-// RUN: %clang @%t.system.cc1.rsp -pedantic -Werror
-// RUN: %clang -x objective-c -fsyntax-only %t.dir/modules_cdb_input.cpp \
-// RUN: -F%S/Inputs/frameworks -fmodules -fimplicit-module-maps \
-// RUN: -pedantic -Werror @%t.tu.rsp
-
-#include <Inferred/Inferred.h>
-#include <System/System.h>
-
-inferred a = bigger_than_int;
diff --git a/clang/test/ClangScanDeps/modules-inferred.m b/clang/test/ClangScanDeps/modules-inferred.m
deleted file mode 100644
index 19a7ee0a4c8f..000000000000
--- a/clang/test/ClangScanDeps/modules-inferred.m
+++ /dev/null
@@ -1,61 +0,0 @@
-// RUN: rm -rf %t.dir
-// RUN: rm -rf %t.cdb
-// RUN: mkdir -p %t.dir
-// RUN: cp %s %t.dir/modules_cdb_input.cpp
-// RUN: sed -e "s|DIR|%/t.dir|g" -e "s|FRAMEWORKS|%/S/Inputs/frameworks|g" \
-// RUN: %/S/Inputs/modules_inferred_cdb.json > %t.cdb
-//
-// RUN: echo -%t.dir > %t.result
-// RUN: echo -%S >> %t.result
-// RUN: clang-scan-deps -compilation-database %t.cdb -j 1 -format experimental-full \
-// RUN: -generate-modules-path-args -mode preprocess-minimized-sources >> %t.result
-// RUN: cat %t.result | sed -e 's/\\\\/\//g' -e 's/\\/\//g' | FileCheck --check-prefixes=CHECK %s
-
-#include <Inferred/Inferred.h>
-
-inferred a = 0;
-
-// CHECK: -[[PREFIX:.*]]
-// CHECK-NEXT: -[[SOURCEDIR:.*]]
-// CHECK-NEXT: {
-// CHECK-NEXT: "modules": [
-// CHECK-NEXT: {
-// CHECK-NEXT: "clang-module-deps": [],
-// CHECK-NEXT: "clang-modulemap-file": "[[SOURCEDIR]]/Inputs/frameworks/module.modulemap",
-// CHECK-NEXT: "command-line": [
-// CHECK-NEXT: "-cc1",
-// CHECK: "-emit-module",
-// CHECK: "-fmodule-name=Inferred",
-// CHECK: "-fno-implicit-modules",
-// CHECK: ],
-// CHECK-NEXT: "context-hash": "[[CONTEXT_HASH_H1:[A-Z0-9]+]]",
-// CHECK-NEXT: "file-deps": [
-// CHECK-NEXT: "[[SOURCEDIR]]/Inputs/frameworks/Inferred.framework/Frameworks/Sub.framework/Headers/Sub.h",
-// CHECK-NEXT: "[[SOURCEDIR]]/Inputs/frameworks/Inferred.framework/Headers/Inferred.h",
-// CHECK-NEXT: "[[SOURCEDIR]]/Inputs/frameworks/module.modulemap"
-// CHECK-NEXT: ],
-// CHECK-NEXT: "name": "Inferred"
-// CHECK-NEXT: }
-// CHECK-NEXT: ],
-// CHECK-NEXT: "translation-units": [
-// CHECK-NEXT: {
-// CHECK-NEXT: "clang-context-hash": "[[CONTEXT_HASH_H1]]",
-// CHECK-NEXT: "clang-module-deps": [
-// CHECK-NEXT: {
-// CHECK-NEXT: "context-hash": "[[CONTEXT_HASH_H1]]",
-// CHECK-NEXT: "module-name": "Inferred"
-// CHECK-NEXT: }
-// CHECK-NEXT: ],
-// CHECK-NEXT: "command-line": [
-// CHECK-NEXT: "-fno-implicit-modules",
-// CHECK-NEXT: "-fno-implicit-module-maps",
-// CHECK-NEXT: "-fmodule-file=[[PREFIX]]/module-cache/[[CONTEXT_HASH_H1]]/Inferred-{{[A-Z0-9]+}}.pcm",
-// CHECK-NEXT: "-fmodule-map-file=[[SOURCEDIR]]/Inputs/frameworks/module.modulemap"
-// CHECK-NEXT: ],
-// CHECK-NEXT: "file-deps": [
-// CHECK-NEXT: "[[PREFIX]]/modules_cdb_input.cpp"
-// CHECK-NEXT: ],
-// CHECK-NEXT: "input-file": "[[PREFIX]]/modules_cdb_input.cpp"
-// CHECK-NEXT: }
-// CHECK-NEXT: ]
-// CHECK-NEXT: }
diff --git a/clang/utils/module-deps-to-rsp.py b/clang/utils/module-deps-to-rsp.py
deleted file mode 100755
index 7bc2955660ab..000000000000
--- a/clang/utils/module-deps-to-rsp.py
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/usr/bin/env python3
-
-# Converts clang-scan-deps output into response files.
-# * For modules, arguments in the resulting response file are enough to build a PCM.
-# * For translation units, the response file needs to be added to the original Clang invocation from compilation
-# database.
-#
-# Usage:
-#
-# clang-scan-deps -compilation-database compile_commands.json ... > deps.json
-# module-deps-to-rsp.py deps.json --module-name=ModuleName > module_name.cc1.rsp
-# module-deps-to-rsp.py deps.json --tu-index=0 > tu.rsp
-# clang @module_name.cc1.rsp
-# clang ... @tu.rsp
-
-import argparse
-import json
-import sys
-
-class ModuleNotFoundError(Exception):
- def __init__(self, module_name):
- self.module_name = module_name
-
-class FullDeps:
- def __init__(self):
- self.modules = dict()
- self.translation_units = str()
-
-def getModulePathArgs(modules, full_deps):
- cmd = []
- for md in modules:
- m = full_deps.modules[md['module-name'] + '-' + md['context-hash']]
- cmd += [u'-fmodule-map-file=' + m['clang-modulemap-file']]
- cmd += [u'-fmodule-file=' + md['module-name'] + '-' + md['context-hash'] + '.pcm']
- return cmd
-
-def getCommandLineForModule(module_name, full_deps):
- for m in full_deps.modules.values():
- if m['name'] == module_name:
- module = m
- break
- else:
- raise ModuleNotFoundError(module_name)
-
- cmd = m['command-line']
- cmd += getModulePathArgs(m['clang-module-deps'], full_deps)
- cmd += [u'-o', m['name'] + '-' + m['context-hash'] + '.pcm']
- cmd += [m['clang-modulemap-file']]
-
- return cmd
-
-def getCommandLineForTU(tu, full_deps):
- cmd = tu['command-line']
- cmd += getModulePathArgs(tu['clang-module-deps'], full_deps)
- return cmd
-
-def parseFullDeps(json):
- ret = FullDeps()
- for m in json['modules']:
- ret.modules[m['name'] + '-' + m['context-hash']] = m
- ret.translation_units = json['translation-units']
- return ret
-
-def quote(str):
- return '"' + str.replace("\\", "\\\\") + '"'
-
-def main():
- parser = argparse.ArgumentParser()
- parser.add_argument("full_deps_file", help="Path to the full dependencies json file",
- type=str)
- action = parser.add_mutually_exclusive_group(required=True)
- action.add_argument("--module-name", help="The name of the module to get arguments for",
- type=str)
- action.add_argument("--tu-index", help="The index of the translation unit to get arguments for",
- type=int)
- args = parser.parse_args()
-
- full_deps = parseFullDeps(json.load(open(args.full_deps_file, 'r')))
-
- try:
- cmd = []
-
- if args.module_name:
- cmd = getCommandLineForModule(args.module_name, full_deps)
- elif args.tu_index != None:
- cmd = getCommandLineForTU(full_deps.translation_units[args.tu_index], full_deps)
-
- print(" ".join(map(quote, cmd)))
- except:
- print("Unexpected error:", sys.exc_info()[0])
- raise
-
-if __name__ == '__main__':
- main()
More information about the cfe-commits
mailing list