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

llvm-svn: 100498
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp
index 2a76d6f..427bd6a 100644
--- a/clang/lib/Frontend/ASTUnit.cpp
+++ b/clang/lib/Frontend/ASTUnit.cpp
@@ -141,24 +141,22 @@
 }
 
 ASTUnit *ASTUnit::LoadFromPCHFile(const std::string &Filename,
-                                  llvm::MaybeOwningPtr<Diagnostic> Diags,
+                                  llvm::IntrusiveRefCntPtr<Diagnostic> Diags,
                                   bool OnlyLocalDecls,
                                   RemappedFile *RemappedFiles,
                                   unsigned NumRemappedFiles,
                                   bool CaptureDiagnostics) {
   llvm::OwningPtr<ASTUnit> AST(new ASTUnit(true));
   
-  if (Diags.get())
-    AST->Diagnostics = Diags;
-  else {
+  if (!Diags.getPtr()) {
     // No diagnostics engine was provided, so create our own diagnostics object
     // with the default options.
     DiagnosticOptions DiagOpts;
-    AST->Diagnostics.reset(CompilerInstance::createDiagnostics(DiagOpts, 0, 0),
-                           true);
+    Diags = CompilerInstance::createDiagnostics(DiagOpts, 0, 0);
   }
   
   AST->OnlyLocalDecls = OnlyLocalDecls;
+  AST->Diagnostics = Diags;
   AST->FileMgr.reset(new FileManager);
   AST->SourceMgr.reset(new SourceManager(AST->getDiagnostics()));
   AST->HeaderInfo.reset(new HeaderSearch(AST->getFileManager()));
@@ -290,7 +288,7 @@
 }
 
 ASTUnit *ASTUnit::LoadFromCompilerInvocation(CompilerInvocation *CI,
-                                         llvm::MaybeOwningPtr<Diagnostic> Diags,
+                                   llvm::IntrusiveRefCntPtr<Diagnostic> Diags,
                                              bool OnlyLocalDecls,
                                              bool CaptureDiagnostics) {
   // Create the compiler instance to use for building the AST.
@@ -298,16 +296,16 @@
   llvm::OwningPtr<ASTUnit> AST;
   llvm::OwningPtr<TopLevelDeclTrackerAction> Act;
 
-  if (!Diags.get()) {
+  if (!Diags.getPtr()) {
     // No diagnostics engine was provided, so create our own diagnostics object
     // with the default options.
     DiagnosticOptions DiagOpts;
-    Diags.reset(CompilerInstance::createDiagnostics(DiagOpts, 0, 0), true);
+    Diags = CompilerInstance::createDiagnostics(DiagOpts, 0, 0);
   }
   
   Clang.setInvocation(CI);
 
-  Clang.setDiagnostics(Diags.get());
+  Clang.setDiagnostics(Diags.getPtr());
   Clang.setDiagnosticClient(Diags->getClient());
 
   // Create the target instance.
@@ -315,7 +313,6 @@
                                                Clang.getTargetOpts()));
   if (!Clang.hasTarget()) {
     Clang.takeDiagnosticClient();
-    Clang.takeDiagnostics();
     return 0;
   }
 
@@ -370,7 +367,6 @@
   Act->EndSourceFile();
 
   Clang.takeDiagnosticClient();
-  Clang.takeDiagnostics();
   Clang.takeInvocation();
 
   AST->Invocation.reset(Clang.takeInvocation());
@@ -380,23 +376,22 @@
   Clang.takeSourceManager();
   Clang.takeFileManager();
   Clang.takeDiagnosticClient();
-  Clang.takeDiagnostics();
   return 0;
 }
 
 ASTUnit *ASTUnit::LoadFromCommandLine(const char **ArgBegin,
                                       const char **ArgEnd,
-                                      llvm::MaybeOwningPtr<Diagnostic> Diags,
+                                    llvm::IntrusiveRefCntPtr<Diagnostic> Diags,
                                       llvm::StringRef ResourceFilesPath,
                                       bool OnlyLocalDecls,
                                       RemappedFile *RemappedFiles,
                                       unsigned NumRemappedFiles,
                                       bool CaptureDiagnostics) {
-  if (!Diags.get()) {
+  if (!Diags.getPtr()) {
     // No diagnostics engine was provided, so create our own diagnostics object
     // with the default options.
     DiagnosticOptions DiagOpts;
-    Diags.reset(CompilerInstance::createDiagnostics(DiagOpts, 0, 0), true);
+    Diags = CompilerInstance::createDiagnostics(DiagOpts, 0, 0);
   }
   
   llvm::SmallVector<const char *, 16> Args;