Make Diagnostic reference-counted, which is simpler than juggling
maybe-ownership vs. ownership.

llvm-svn: 100498
diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp
index 879e9f6..1f915e3 100644
--- a/clang/lib/Frontend/CompilerInstance.cpp
+++ b/clang/lib/Frontend/CompilerInstance.cpp
@@ -52,7 +52,7 @@
 }
 
 void CompilerInstance::setDiagnostics(Diagnostic *Value) {
-  Diagnostics.reset(Value);
+  Diagnostics = Value;
 }
 
 void CompilerInstance::setDiagnosticClient(DiagnosticClient *Value) {
@@ -130,15 +130,16 @@
 }
 
 void CompilerInstance::createDiagnostics(int Argc, char **Argv) {
-  Diagnostics.reset(createDiagnostics(getDiagnosticOpts(), Argc, Argv));
+  Diagnostics = createDiagnostics(getDiagnosticOpts(), Argc, Argv);
 
   if (Diagnostics)
     DiagClient.reset(Diagnostics->getClient());
 }
 
-Diagnostic *CompilerInstance::createDiagnostics(const DiagnosticOptions &Opts,
-                                                int Argc, char **Argv) {
-  llvm::OwningPtr<Diagnostic> Diags(new Diagnostic());
+llvm::IntrusiveRefCntPtr<Diagnostic> 
+CompilerInstance::createDiagnostics(const DiagnosticOptions &Opts,
+                                    int Argc, char **Argv) {
+  llvm::IntrusiveRefCntPtr<Diagnostic> Diags(new Diagnostic());
 
   // Create the diagnostic client for reporting errors or for
   // implementing -verify.
@@ -152,7 +153,7 @@
       DiagClient.reset(new TextDiagnosticPrinter(llvm::errs(), Opts));
       Diags->setClient(DiagClient.take());
       Diags->Report(diag::err_fe_stderr_binary);
-      return Diags.take();
+      return Diags;
     } else {
       DiagClient.reset(new BinaryDiagnosticSerializer(llvm::errs()));
     }
@@ -171,7 +172,7 @@
   // Configure our handling of diagnostics.
   ProcessWarningOptions(*Diags, Opts);
 
-  return Diags.take();
+  return Diags;
 }
 
 // File Manager