diff options
Diffstat (limited to 'clang/lib/Frontend/CompilerInstance.cpp')
-rw-r--r-- | clang/lib/Frontend/CompilerInstance.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp index 9cb26f8..187e2b7 100644 --- a/clang/lib/Frontend/CompilerInstance.cpp +++ b/clang/lib/Frontend/CompilerInstance.cpp @@ -1022,9 +1022,19 @@ static bool compileAndLoadModule(CompilerInstance &ImportingInstance, case llvm::LockFileManager::LFS_Shared: // Someone else is responsible for building the module. Wait for them to // finish. - if (Locked.waitForUnlock() == llvm::LockFileManager::Res_OwnerDied) + switch (Locked.waitForUnlock()) { + case llvm::LockFileManager::Res_Success: + ModuleLoadCapabilities |= ASTReader::ARR_OutOfDate; + break; + case llvm::LockFileManager::Res_OwnerDied: continue; // try again to get the lock. - ModuleLoadCapabilities |= ASTReader::ARR_OutOfDate; + case llvm::LockFileManager::Res_Timeout: + Diags.Report(ModuleNameLoc, diag::err_module_lock_timeout) + << Module->Name; + // Clear the lock file so that future invokations can make progress. + Locked.unsafeRemoveLockFile(); + return false; + } break; } |