mirror of
https://github.com/intel/llvm.git
synced 2026-01-28 01:04:49 +08:00
Revert "[modules] Add experimental -fmodule-map-file-home-is-cwd flag to -cc1."
This reverts commit r223753. It broke the Green Dragon build for a few hours: http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-incremental_build/2259/ http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-incremental_build/2259/consoleFull#43901905849ba4694-19c4-4d7e-bec5-911270d8a58c I suspect `clang-tools-extra` just needs a follow-up for an API change, but I'm not the right one to look into it. llvm-svn: 223759
This commit is contained in:
@@ -337,9 +337,6 @@ def fno_modules_error_recovery : Flag<["-"], "fno-modules-error-recovery">,
|
||||
def fmodule_implementation_of : Separate<["-"], "fmodule-implementation-of">,
|
||||
MetaVarName<"<name>">,
|
||||
HelpText<"Specify the name of the module whose implementation file this is">;
|
||||
def fmodule_map_file_home_is_cwd : Flag<["-"], "fmodule-map-file-home-is-cwd">,
|
||||
HelpText<"Use the current working directory as the home directory of "
|
||||
"module maps specified by -fmodule-map-file=<FILE>">;
|
||||
|
||||
let Group = Action_Group in {
|
||||
|
||||
|
||||
@@ -640,8 +640,7 @@ private:
|
||||
};
|
||||
|
||||
LoadModuleMapResult loadModuleMapFileImpl(const FileEntry *File,
|
||||
bool IsSystem,
|
||||
const DirectoryEntry *Dir);
|
||||
bool IsSystem);
|
||||
|
||||
/// \brief Try to load the module map file in the given directory.
|
||||
///
|
||||
|
||||
@@ -101,15 +101,6 @@ public:
|
||||
/// \brief Interpret module maps. This option is implied by full modules.
|
||||
unsigned ModuleMaps : 1;
|
||||
|
||||
/// \brief Set the 'home directory' of a module map file to the current
|
||||
/// working directory (or the home directory of the module map file that
|
||||
/// contained the 'extern module' directive importing this module map file
|
||||
/// if any) rather than the directory containing the module map file.
|
||||
//
|
||||
/// The home directory is where we look for files named in the module map
|
||||
/// file.
|
||||
unsigned ModuleMapFileHomeIsCwd : 1;
|
||||
|
||||
/// \brief The interval (in seconds) between pruning operations.
|
||||
///
|
||||
/// This operation is expensive, because it requires Clang to walk through
|
||||
@@ -167,7 +158,6 @@ public:
|
||||
public:
|
||||
HeaderSearchOptions(StringRef _Sysroot = "/")
|
||||
: Sysroot(_Sysroot), DisableModuleHash(0), ModuleMaps(0),
|
||||
ModuleMapFileHomeIsCwd(0),
|
||||
ModuleCachePruneInterval(7*24*60*60),
|
||||
ModuleCachePruneAfter(31*24*60*60),
|
||||
BuildSessionTimestamp(0),
|
||||
|
||||
@@ -454,12 +454,8 @@ public:
|
||||
/// \param IsSystem Whether this module map file is in a system header
|
||||
/// directory, and therefore should be considered a system module.
|
||||
///
|
||||
/// \param HomeDir The directory in which relative paths within this module
|
||||
/// map file will be resolved.
|
||||
///
|
||||
/// \returns true if an error occurred, false otherwise.
|
||||
bool parseModuleMapFile(const FileEntry *File, bool IsSystem,
|
||||
const DirectoryEntry *HomeDir);
|
||||
bool parseModuleMapFile(const FileEntry *File, bool IsSystem);
|
||||
|
||||
/// \brief Dump the contents of the module map, for debugging purposes.
|
||||
void dump();
|
||||
|
||||
@@ -1003,7 +1003,6 @@ static void ParseHeaderSearchArgs(HeaderSearchOptions &Opts, ArgList &Args) {
|
||||
Opts.DisableModuleHash = Args.hasArg(OPT_fdisable_module_hash);
|
||||
// -fmodules implies -fmodule-maps
|
||||
Opts.ModuleMaps = Args.hasArg(OPT_fmodule_maps) || Args.hasArg(OPT_fmodules);
|
||||
Opts.ModuleMapFileHomeIsCwd = Args.hasArg(OPT_fmodule_map_file_home_is_cwd);
|
||||
Opts.ModuleCachePruneInterval =
|
||||
getLastArgIntValue(Args, OPT_fmodules_prune_interval, 7 * 24 * 60 * 60);
|
||||
Opts.ModuleCachePruneAfter =
|
||||
|
||||
@@ -1113,10 +1113,11 @@ HeaderSearch::findModuleForHeader(const FileEntry *File) const {
|
||||
return ModMap.findModuleForHeader(File);
|
||||
}
|
||||
|
||||
static const FileEntry *getPrivateModuleMap(const FileEntry *File,
|
||||
static const FileEntry *getPrivateModuleMap(StringRef ModuleMapPath,
|
||||
const DirectoryEntry *Directory,
|
||||
FileManager &FileMgr) {
|
||||
StringRef Filename = llvm::sys::path::filename(File->getName());
|
||||
SmallString<128> PrivateFilename(File->getDir()->getName());
|
||||
StringRef Filename = llvm::sys::path::filename(ModuleMapPath);
|
||||
SmallString<128> PrivateFilename(Directory->getName());
|
||||
if (Filename == "module.map")
|
||||
llvm::sys::path::append(PrivateFilename, "module_private.map");
|
||||
else if (Filename == "module.modulemap")
|
||||
@@ -1127,25 +1128,7 @@ static const FileEntry *getPrivateModuleMap(const FileEntry *File,
|
||||
}
|
||||
|
||||
bool HeaderSearch::loadModuleMapFile(const FileEntry *File, bool IsSystem) {
|
||||
// Find the directory for the module. For frameworks, that may require going
|
||||
// up from the 'Modules' directory.
|
||||
const DirectoryEntry *Dir = nullptr;
|
||||
if (getHeaderSearchOpts().ModuleMapFileHomeIsCwd)
|
||||
Dir = FileMgr.getDirectory(".");
|
||||
else {
|
||||
Dir = File->getDir();
|
||||
StringRef DirName(Dir->getName());
|
||||
if (llvm::sys::path::filename(DirName) == "Modules") {
|
||||
DirName = llvm::sys::path::parent_path(DirName);
|
||||
if (DirName.endswith(".framework"))
|
||||
Dir = FileMgr.getDirectory(DirName);
|
||||
// FIXME: This assert can fail if there's a race between the above check
|
||||
// and the removal of the directory.
|
||||
assert(Dir && "parent must exist");
|
||||
}
|
||||
}
|
||||
|
||||
switch (loadModuleMapFileImpl(File, IsSystem, Dir)) {
|
||||
switch (loadModuleMapFileImpl(File, IsSystem)) {
|
||||
case LMM_AlreadyLoaded:
|
||||
case LMM_NewlyLoaded:
|
||||
return false;
|
||||
@@ -1157,8 +1140,7 @@ bool HeaderSearch::loadModuleMapFile(const FileEntry *File, bool IsSystem) {
|
||||
}
|
||||
|
||||
HeaderSearch::LoadModuleMapResult
|
||||
HeaderSearch::loadModuleMapFileImpl(const FileEntry *File, bool IsSystem,
|
||||
const DirectoryEntry *Dir) {
|
||||
HeaderSearch::loadModuleMapFileImpl(const FileEntry *File, bool IsSystem) {
|
||||
assert(File && "expected FileEntry");
|
||||
|
||||
// Check whether we've already loaded this module map, and mark it as being
|
||||
@@ -1167,14 +1149,15 @@ HeaderSearch::loadModuleMapFileImpl(const FileEntry *File, bool IsSystem,
|
||||
if (!AddResult.second)
|
||||
return AddResult.first->second ? LMM_AlreadyLoaded : LMM_InvalidModuleMap;
|
||||
|
||||
if (ModMap.parseModuleMapFile(File, IsSystem, Dir)) {
|
||||
if (ModMap.parseModuleMapFile(File, IsSystem)) {
|
||||
LoadedModuleMaps[File] = false;
|
||||
return LMM_InvalidModuleMap;
|
||||
}
|
||||
|
||||
// Try to load a corresponding private module map.
|
||||
if (const FileEntry *PMMFile = getPrivateModuleMap(File, FileMgr)) {
|
||||
if (ModMap.parseModuleMapFile(PMMFile, IsSystem, Dir)) {
|
||||
if (const FileEntry *PMMFile =
|
||||
getPrivateModuleMap(File->getName(), File->getDir(), FileMgr)) {
|
||||
if (ModMap.parseModuleMapFile(PMMFile, IsSystem)) {
|
||||
LoadedModuleMaps[File] = false;
|
||||
return LMM_InvalidModuleMap;
|
||||
}
|
||||
@@ -1248,8 +1231,7 @@ HeaderSearch::loadModuleMapFile(const DirectoryEntry *Dir, bool IsSystem,
|
||||
return KnownDir->second ? LMM_AlreadyLoaded : LMM_InvalidModuleMap;
|
||||
|
||||
if (const FileEntry *ModuleMapFile = lookupModuleMapFile(Dir, IsFramework)) {
|
||||
LoadModuleMapResult Result =
|
||||
loadModuleMapFileImpl(ModuleMapFile, IsSystem, Dir);
|
||||
LoadModuleMapResult Result = loadModuleMapFileImpl(ModuleMapFile, IsSystem);
|
||||
// Add Dir explicitly in case ModuleMapFile is in a subdirectory.
|
||||
// E.g. Foo.framework/Modules/module.modulemap
|
||||
// ^Dir ^ModuleMapFile
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
#include "clang/Basic/TargetInfo.h"
|
||||
#include "clang/Basic/TargetOptions.h"
|
||||
#include "clang/Lex/HeaderSearch.h"
|
||||
#include "clang/Lex/HeaderSearchOptions.h"
|
||||
#include "clang/Lex/LexDiagnostic.h"
|
||||
#include "clang/Lex/Lexer.h"
|
||||
#include "clang/Lex/LiteralSupport.h"
|
||||
@@ -649,7 +648,7 @@ ModuleMap::inferFrameworkModule(StringRef ModuleName,
|
||||
bool IsFrameworkDir = Parent.endswith(".framework");
|
||||
if (const FileEntry *ModMapFile =
|
||||
HeaderInfo.lookupModuleMapFile(ParentDir, IsFrameworkDir)) {
|
||||
parseModuleMapFile(ModMapFile, IsSystem, ParentDir);
|
||||
parseModuleMapFile(ModMapFile, IsSystem);
|
||||
inferred = InferredDirectories.find(ParentDir);
|
||||
}
|
||||
|
||||
@@ -1025,8 +1024,7 @@ namespace clang {
|
||||
/// \brief The current module map file.
|
||||
const FileEntry *ModuleMapFile;
|
||||
|
||||
/// \brief The directory that file names in this module map file should
|
||||
/// be resolved relative to.
|
||||
/// \brief The directory that this module map resides in.
|
||||
const DirectoryEntry *Directory;
|
||||
|
||||
/// \brief The directory containing Clang-supplied headers.
|
||||
@@ -1593,11 +1591,7 @@ void ModuleMapParser::parseExternModuleDecl() {
|
||||
FileNameRef = ModuleMapFileName.str();
|
||||
}
|
||||
if (const FileEntry *File = SourceMgr.getFileManager().getFile(FileNameRef))
|
||||
Map.parseModuleMapFile(
|
||||
File, /*IsSystem=*/false,
|
||||
Map.HeaderInfo.getHeaderSearchOpts().ModuleMapFileHomeIsCwd
|
||||
? Directory
|
||||
: File->getDir());
|
||||
Map.parseModuleMapFile(File, /*IsSystem=*/false);
|
||||
}
|
||||
|
||||
/// \brief Parse a requires declaration.
|
||||
@@ -2339,8 +2333,7 @@ bool ModuleMapParser::parseModuleMapFile() {
|
||||
} while (true);
|
||||
}
|
||||
|
||||
bool ModuleMap::parseModuleMapFile(const FileEntry *File, bool IsSystem,
|
||||
const DirectoryEntry *Dir) {
|
||||
bool ModuleMap::parseModuleMapFile(const FileEntry *File, bool IsSystem) {
|
||||
llvm::DenseMap<const FileEntry *, bool>::iterator Known
|
||||
= ParsedModuleMap.find(File);
|
||||
if (Known != ParsedModuleMap.end())
|
||||
@@ -2353,6 +2346,17 @@ bool ModuleMap::parseModuleMapFile(const FileEntry *File, bool IsSystem,
|
||||
if (!Buffer)
|
||||
return ParsedModuleMap[File] = true;
|
||||
|
||||
// Find the directory for the module. For frameworks, that may require going
|
||||
// up from the 'Modules' directory.
|
||||
const DirectoryEntry *Dir = File->getDir();
|
||||
StringRef DirName(Dir->getName());
|
||||
if (llvm::sys::path::filename(DirName) == "Modules") {
|
||||
DirName = llvm::sys::path::parent_path(DirName);
|
||||
if (DirName.endswith(".framework"))
|
||||
Dir = SourceMgr.getFileManager().getDirectory(DirName);
|
||||
assert(Dir && "parent must exist");
|
||||
}
|
||||
|
||||
// Parse this module map file.
|
||||
Lexer L(ID, SourceMgr.getBuffer(ID), SourceMgr, MMapLangOpts);
|
||||
ModuleMapParser Parser(L, SourceMgr, Target, Diags, *this, File, Dir,
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
module B {
|
||||
header "Inputs/modular_maps/common.h"
|
||||
private header "Inputs/modular_maps/b.h"
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
module A {
|
||||
header "Inputs/modular_maps/common.h"
|
||||
header "Inputs/modular_maps/a.h"
|
||||
}
|
||||
|
||||
extern module B "Inputs/modular_maps-moduleb-cwd.map"
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
module C {
|
||||
header "Inputs/modular_maps/c.h"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
module "relative-dep-gen" {
|
||||
header "Inputs/relative-dep-gen-1.h"
|
||||
header "Inputs/relative-dep-gen-2.h"
|
||||
}
|
||||
@@ -1,15 +1,6 @@
|
||||
// RUN: rm -rf %t
|
||||
//
|
||||
// RUN: %clang_cc1 -x objective-c++ -fmodules-cache-path=%t -fmodules -fmodule-map-file=%S/Inputs/modular_maps/modulea.map -fmodule-map-file=%S/Inputs/modular_maps/modulec.map -I %S/Inputs/modular_maps %s -verify
|
||||
// RUN: %clang_cc1 -x objective-c++ -fmodules-cache-path=%t -fmodules -fmodule-map-file=%S/Inputs/modular_maps/modulec.map -fmodule-map-file=%S/Inputs/modular_maps/modulea.map -I %S/Inputs/modular_maps %s -verify
|
||||
//
|
||||
// RUN: cd %S
|
||||
// RUN: %clang_cc1 -x objective-c++ -fmodules-cache-path=%t -fmodules -fmodule-map-file=Inputs/modular_maps/modulea.map -fmodule-map-file=Inputs/modular_maps/modulec.map -I Inputs/modular_maps %s -verify
|
||||
// RUN: %clang_cc1 -x objective-c++ -fmodules-cache-path=%t -fmodules -fmodule-map-file=Inputs/modular_maps/modulec.map -fmodule-map-file=Inputs/modular_maps/modulea.map -I Inputs/modular_maps %s -verify
|
||||
//
|
||||
// RUN: cd %S
|
||||
// RUN: %clang_cc1 -x objective-c++ -fmodules-cache-path=%t -fmodules -fmodule-map-file=Inputs/modular_maps/modulea-cwd.map -fmodule-map-file=Inputs/modular_maps/modulec-cwd.map -I Inputs/modular_maps %s -verify -fmodule-map-file-home-is-cwd
|
||||
// RUN: %clang_cc1 -x objective-c++ -fmodules-cache-path=%t -fmodules -fmodule-map-file=Inputs/modular_maps/modulec-cwd.map -fmodule-map-file=Inputs/modular_maps/modulea-cwd.map -I Inputs/modular_maps %s -verify -fmodule-map-file-home-is-cwd
|
||||
|
||||
#include "common.h"
|
||||
#include "a.h"
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
// RUN: cd %S
|
||||
// RUN: rm -rf %t
|
||||
// RUN: mkdir %t
|
||||
//
|
||||
// RUN: %clang_cc1 -cc1 -fmodule-name=relative-dep-gen -emit-module -x c++ Inputs/relative-dep-gen.modulemap -dependency-file %t/build.d -MT mod.pcm -o %t/mod.pcm
|
||||
// RUN: %clang_cc1 -cc1 -fmodule-map-file=Inputs/relative-dep-gen.modulemap -fmodule-file=%t/mod.pcm -dependency-file %t/use-explicit.d -MT use.o relative-dep-gen.cpp -fsyntax-only
|
||||
// RUN: %clang_cc1 -cc1 -fmodule-map-file=Inputs/relative-dep-gen.modulemap -dependency-file %t/use-implicit.d relative-dep-gen.cpp -MT use.o -fsyntax-only
|
||||
@@ -11,14 +10,6 @@
|
||||
// RUN: FileCheck --check-prefix=CHECK-BUILD %s < %t/build.d
|
||||
// RUN: FileCheck --check-prefix=CHECK-USE %s < %t/use-explicit.d
|
||||
// RUN: FileCheck --check-prefix=CHECK-USE %s < %t/use-implicit.d
|
||||
//
|
||||
// RUN: %clang_cc1 -cc1 -fmodule-name=relative-dep-gen -emit-module -x c++ Inputs/relative-dep-gen-cwd.modulemap -dependency-file %t/build-cwd.d -MT mod.pcm -o %t/mod-cwd.pcm -fmodule-map-file-home-is-cwd
|
||||
// RUN: %clang_cc1 -cc1 -fmodule-map-file=Inputs/relative-dep-gen-cwd.modulemap -fmodule-file=%t/mod-cwd.pcm -dependency-file %t/use-explicit-cwd.d -MT use.o relative-dep-gen.cpp -fsyntax-only -fmodule-map-file-home-is-cwd
|
||||
// RUN: %clang_cc1 -cc1 -fmodule-map-file=Inputs/relative-dep-gen-cwd.modulemap -dependency-file %t/use-implicit-cwd.d relative-dep-gen.cpp -MT use.o -fsyntax-only -fmodule-map-file-home-is-cwd
|
||||
//
|
||||
// RUN: FileCheck --check-prefix=CHECK-BUILD %s < %t/build-cwd.d
|
||||
// RUN: FileCheck --check-prefix=CHECK-USE %s < %t/use-explicit-cwd.d
|
||||
// RUN: FileCheck --check-prefix=CHECK-USE %s < %t/use-implicit-cwd.d
|
||||
|
||||
#include "Inputs/relative-dep-gen-1.h"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user