]> granicus.if.org Git - clang/commitdiff
If we fail to create a temporary file for the precompiled preamble,
authorDouglas Gregor <dgregor@apple.com>
Sat, 11 Sep 2010 17:56:52 +0000 (17:56 +0000)
committerDouglas Gregor <dgregor@apple.com>
Sat, 11 Sep 2010 17:56:52 +0000 (17:56 +0000)
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

lib/Frontend/ASTUnit.cpp

index 9fbaeeaac04ef53bf8ba0c8cc58289b46694531b..4cbb2a3f13a0e6fd772f714d4a071d98b2e40832 100644 (file)
@@ -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;