diff --git a/Driver/RewriteTest.cpp b/Driver/RewriteTest.cpp
index afd34b9..c564576 100644
--- a/Driver/RewriteTest.cpp
+++ b/Driver/RewriteTest.cpp
@@ -84,8 +84,9 @@
     // Needed for header files being rewritten
     bool IsHeader;
     
-    std::ostream &OutFile;
-    
+    std::string InFileName;
+    std::string OutFileName;
+     
     std::string Preamble;
     
     static const int OBJC_ABI_VERSION =7 ;
@@ -96,13 +97,8 @@
     // Top Level Driver code.
     virtual void HandleTopLevelDecl(Decl *D);
     void HandleDeclInMainFile(Decl *D);
-    RewriteTest(bool isHeader, std::ostream &outFile,
-                Diagnostic &D, const LangOptions &LOpts)
-      : Diags(D), LangOpts(LOpts), OutFile(outFile) {
-      IsHeader = isHeader;
-      RewriteFailedDiag = Diags.getCustomDiagID(Diagnostic::Warning, 
-               "rewriting sub-expression within a macro (may not be correct)");
-    }
+    RewriteTest(std::string inFile, std::string outFile,
+                Diagnostic &D, const LangOptions &LOpts);
     ~RewriteTest();
     
     void ReplaceStmt(Stmt *Old, Stmt *New) {
@@ -239,29 +235,21 @@
   return Ext == "h" || Ext == "hh" || Ext == "H";
 }    
 
+RewriteTest::RewriteTest(std::string inFile, std::string outFile,
+                         Diagnostic &D, const LangOptions &LOpts)
+      : Diags(D), LangOpts(LOpts) {
+  IsHeader = IsHeaderFile(inFile);
+  InFileName = inFile;
+  OutFileName = outFile;
+  RewriteFailedDiag = Diags.getCustomDiagID(Diagnostic::Warning, 
+               "rewriting sub-expression within a macro (may not be correct)");
+}
+
 ASTConsumer *clang::CreateCodeRewriterTest(const std::string& InFile,
                                            const std::string& OutFile,
                                            Diagnostic &Diags, 
                                            const LangOptions &LOpts) {
-  // Create the output file.
-  
-  std::ostream *Out;
-  if (OutFile == "-") {
-    Out = llvm::cout.stream();
-  } else if (!OutFile.empty()) {
-    Out = new std::ofstream(OutFile.c_str(), 
-                            std::ios_base::binary|std::ios_base::out);
-  } else if (InFile == "-") {
-    Out = llvm::cout.stream();
-  } else {
-    llvm::sys::Path Path(InFile);
-    Path.eraseSuffix();
-    Path.appendSuffix("cpp");
-    Out = new std::ofstream(Path.toString().c_str(), 
-                            std::ios_base::binary|std::ios_base::out);
-  }
-  
-  return new RewriteTest(IsHeaderFile(InFile), *Out, Diags, LOpts);
+  return new RewriteTest(InFile, OutFile, Diags, LOpts);
 }
 
 void RewriteTest::Initialize(ASTContext &context) {
@@ -436,6 +424,27 @@
   // Rewrite tabs if we care.
   //RewriteTabs();
   
+  if (Diags.hasErrorOccurred())
+    return;
+
+  // Create the output file.
+  
+  std::ostream *OutFile;
+  if (OutFileName == "-") {
+    OutFile = llvm::cout.stream();
+  } else if (!OutFileName.empty()) {
+    OutFile = new std::ofstream(OutFileName.c_str(), 
+                                std::ios_base::binary|std::ios_base::out);
+  } else if (InFileName == "-") {
+    OutFile = llvm::cout.stream();
+  } else {
+    llvm::sys::Path Path(InFileName);
+    Path.eraseSuffix();
+    Path.appendSuffix("cpp");
+    OutFile = new std::ofstream(Path.toString().c_str(), 
+                                std::ios_base::binary|std::ios_base::out);
+  }
+  
   RewriteInclude();
   
   InsertText(SourceLocation::getFileLoc(MainFileID, 0), 
@@ -450,12 +459,12 @@
   if (const RewriteBuffer *RewriteBuf = 
       Rewrite.getRewriteBufferFor(MainFileID)) {
     //printf("Changed:\n");
-    OutFile << std::string(RewriteBuf->begin(), RewriteBuf->end());
+    *OutFile << std::string(RewriteBuf->begin(), RewriteBuf->end());
   } else {
     fprintf(stderr, "No changes\n");
   }
   // Emit metadata.
-  OutFile << ResultStr;
+  *OutFile << ResultStr;
 }
 
 //===----------------------------------------------------------------------===//
diff --git a/test/Rewriter/objc-ivar-receiver-1.m b/test/Rewriter/objc-ivar-receiver-1.m
index 7b01124..05ff908 100644
--- a/test/Rewriter/objc-ivar-receiver-1.m
+++ b/test/Rewriter/objc-ivar-receiver-1.m
@@ -1,4 +1,4 @@
-// RUN: clang -rewrite-test %s 
+// RUN: clang -rewrite-test %s -o -
 // RUN: clang -rewrite-test %s -o - | grep 'newInv->_container'
 
 @interface NSMutableArray 
