If we fail to create a temporary file for the precompiled preamble,

just abort creation of the precompiled preamble rather than doing
silly things. This is the second part of the fix for the weird
preamble-related failures on Windows. Big thanks to Francois Pichet
for the great detective work!


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@113697 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Douglas Gregor 2010-09-11 17:56:52 +00:00
Родитель 0d155a5e1d
Коммит 2cd4fd4b75
1 изменённых файлов: 10 добавлений и 1 удалений

Просмотреть файл

@ -1093,6 +1093,15 @@ llvm::MemoryBuffer *ASTUnit::getMainBufferWithPrecompiledPreamble(
return 0;
}
// Create a temporary file for the precompiled preamble. In rare
// circumstances, this can fail.
std::string PreamblePCHPath = GetPreamblePCHPath();
if (PreamblePCHPath.empty()) {
// Try again next time.
PreambleRebuildCounter = 1;
return 0;
}
// We did not previously compute a preamble, or it can't be reused anyway.
llvm::Timer *PreambleTimer = 0;
if (TimerGroup.get()) {
@ -1138,7 +1147,7 @@ llvm::MemoryBuffer *ASTUnit::getMainBufferWithPrecompiledPreamble(
if (::getenv("LIBCLANG_CHAINING"))
FrontendOpts.ChainedPCH = true;
// FIXME: Generate the precompiled header into memory?
FrontendOpts.OutputFile = GetPreamblePCHPath();
FrontendOpts.OutputFile = PreamblePCHPath;
// Create the compiler instance to use for building the precompiled preamble.
CompilerInstance Clang;