If a module build reports errors, don't try to load it

... just to find out that it didn't build.

llvm-svn: 213454
This commit is contained in:
Ben Langmuir 2014-07-19 16:29:28 +00:00
parent aac5fc9cf8
commit b797d59f03
1 changed files with 21 additions and 13 deletions

View File

@ -852,11 +852,12 @@ static InputKind getSourceInputKindFromOptions(const LangOptions &LangOpts) {
}
/// \brief Compile a module file for the given module, using the options
/// provided by the importing compiler instance.
static void compileModuleImpl(CompilerInstance &ImportingInstance,
SourceLocation ImportLoc,
Module *Module,
StringRef ModuleFileName) {
/// provided by the importing compiler instance. Returns true if the module
/// was built without errors.
static bool compileModuleImpl(CompilerInstance &ImportingInstance,
SourceLocation ImportLoc,
Module *Module,
StringRef ModuleFileName) {
ModuleMap &ModMap
= ImportingInstance.getPreprocessor().getHeaderSearchInfo().getModuleMap();
@ -979,13 +980,20 @@ static void compileModuleImpl(CompilerInstance &ImportingInstance,
if (ImportingInstance.getFrontendOpts().GenerateGlobalModuleIndex) {
ImportingInstance.setBuildGlobalModuleIndex(true);
}
return !Instance.getDiagnostics().hasErrorOccurred();
}
static bool compileAndLoadModule(CompilerInstance &ImportingInstance,
SourceLocation ImportLoc,
SourceLocation ModuleNameLoc,
Module *Module,
SourceLocation ModuleNameLoc, Module *Module,
StringRef ModuleFileName) {
auto diagnoseBuildFailure = [&] {
ImportingInstance.getDiagnostics().Report(ModuleNameLoc,
diag::err_module_not_built)
<< Module->Name << SourceRange(ImportLoc, ModuleNameLoc);
};
// FIXME: have LockFileManager return an error_code so that we can
// avoid the mkdir when the directory already exists.
StringRef Dir = llvm::sys::path::parent_path(ModuleFileName);
@ -1000,9 +1008,11 @@ static bool compileAndLoadModule(CompilerInstance &ImportingInstance,
case llvm::LockFileManager::LFS_Owned:
// We're responsible for building the module ourselves.
// FIXME: if there are errors, don't attempt to load the module.
compileModuleImpl(ImportingInstance, ModuleNameLoc, Module,
ModuleFileName);
if (!compileModuleImpl(ImportingInstance, ModuleNameLoc, Module,
ModuleFileName)) {
diagnoseBuildFailure();
return false;
}
break;
case llvm::LockFileManager::LFS_Shared:
@ -1027,9 +1037,7 @@ static bool compileAndLoadModule(CompilerInstance &ImportingInstance,
// consistent with this ImportingInstance. Try again...
continue;
} else if (ReadResult == ASTReader::Missing) {
ImportingInstance.getDiagnostics().Report(ModuleNameLoc,
diag::err_module_not_built)
<< Module->Name << SourceRange(ImportLoc, ModuleNameLoc);
diagnoseBuildFailure();
}
return ReadResult == ASTReader::Success;
}