Refactor ASTConsumers to take a raw_ostream instead of a filename where 
appropriate.  There shouldn't be any significant functionality change.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72052 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/clang-cc/GeneratePCH.cpp b/tools/clang-cc/GeneratePCH.cpp
index 9bc5ded..62ab0ec 100644
--- a/tools/clang-cc/GeneratePCH.cpp
+++ b/tools/clang-cc/GeneratePCH.cpp
@@ -32,19 +32,19 @@
 namespace {
   class VISIBILITY_HIDDEN PCHGenerator : public SemaConsumer {
     const Preprocessor &PP;
-    std::string OutFile;
+    llvm::raw_ostream *Out;
     Sema *SemaPtr;
     MemorizeStatCalls *StatCalls; // owned by the FileManager
 
   public:
-    explicit PCHGenerator(const Preprocessor &PP, const std::string &OutFile);
+    explicit PCHGenerator(const Preprocessor &PP, llvm::raw_ostream *Out);
     virtual void InitializeSema(Sema &S) { SemaPtr = &S; }
     virtual void HandleTranslationUnit(ASTContext &Ctx);
   };
 }
 
-PCHGenerator::PCHGenerator(const Preprocessor &PP, const std::string &OutFile)
-  : PP(PP), OutFile(OutFile), SemaPtr(0), StatCalls(0) { 
+PCHGenerator::PCHGenerator(const Preprocessor &PP, llvm::raw_ostream *OS)
+  : PP(PP), Out(OS), SemaPtr(0), StatCalls(0) { 
 
   // Install a stat() listener to keep track of all of the stat()
   // calls.
@@ -65,23 +65,14 @@
   assert(SemaPtr && "No Sema?");
   Writer.WritePCH(*SemaPtr, StatCalls);
 
-  // Open up the PCH file.
-  std::string ErrMsg;
-  llvm::raw_fd_ostream Out(OutFile.c_str(), true, ErrMsg);
-  
-  if (!ErrMsg.empty()) {
-    llvm::errs() << "PCH error: " << ErrMsg << "\n";
-    return;
-  }
-
   // Write the generated bitstream to "Out".
-  Out.write((char *)&Buffer.front(), Buffer.size());
+  Out->write((char *)&Buffer.front(), Buffer.size());
 
   // Make sure it hits disk now.
-  Out.flush();
+  Out->flush();
 }
 
 ASTConsumer *clang::CreatePCHGenerator(const Preprocessor &PP,
-                                       const std::string &OutFile) {
-  return new PCHGenerator(PP, OutFile);
+                                       llvm::raw_ostream *OS) {
+  return new PCHGenerator(PP, OS);
 }