diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-09-11 17:56:52 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-09-11 17:56:52 +0000 |
commit | 2cd4fd4b7554480cbea67b48de5e5d467d06e292 (patch) | |
tree | b1653a1fd131b8c4a68fefdab5a2fc09569475af /lib/Frontend/ASTUnit.cpp | |
parent | 0d155a5e1d6406d27df5779d0c9fb98d49a713a0 (diff) |
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
Diffstat (limited to 'lib/Frontend/ASTUnit.cpp')
-rw-r--r-- | lib/Frontend/ASTUnit.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/Frontend/ASTUnit.cpp b/lib/Frontend/ASTUnit.cpp index 9fbaeeaac0..4cbb2a3f13 100644 --- a/lib/Frontend/ASTUnit.cpp +++ b/lib/Frontend/ASTUnit.cpp @@ -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; |