From: David Blaikie Date: Mon, 15 Sep 2014 17:50:10 +0000 (+0000) Subject: unique_ptrify ChainedDiagnosticConsumer's ctor parameters X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c447b36b00dc6d193adc89e7f905c221822de437;p=clang unique_ptrify ChainedDiagnosticConsumer's ctor parameters git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@217793 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Frontend/ChainedDiagnosticConsumer.h b/include/clang/Frontend/ChainedDiagnosticConsumer.h index 11762a97cf..372b381cff 100644 --- a/include/clang/Frontend/ChainedDiagnosticConsumer.h +++ b/include/clang/Frontend/ChainedDiagnosticConsumer.h @@ -26,11 +26,9 @@ class ChainedDiagnosticConsumer : public DiagnosticConsumer { std::unique_ptr Secondary; public: - ChainedDiagnosticConsumer(DiagnosticConsumer *_Primary, - DiagnosticConsumer *_Secondary) { - Primary.reset(_Primary); - Secondary.reset(_Secondary); - } + ChainedDiagnosticConsumer(std::unique_ptr Primary, + std::unique_ptr Secondary) + : Primary(std::move(Primary)), Secondary(std::move(Secondary)) {} void BeginSourceFile(const LangOptions &LO, const Preprocessor *PP) override { diff --git a/include/clang/Frontend/SerializedDiagnosticPrinter.h b/include/clang/Frontend/SerializedDiagnosticPrinter.h index fce795b4a4..207f9f1984 100644 --- a/include/clang/Frontend/SerializedDiagnosticPrinter.h +++ b/include/clang/Frontend/SerializedDiagnosticPrinter.h @@ -67,8 +67,8 @@ enum Level { /// This allows wrapper tools for Clang to get diagnostics from Clang /// (via libclang) without needing to parse Clang's command line output. /// -DiagnosticConsumer *create(std::unique_ptr OS, - DiagnosticOptions *diags); +std::unique_ptr create(std::unique_ptr OS, + DiagnosticOptions *diags); } // end serialized_diags namespace } // end clang namespace diff --git a/lib/Frontend/CompilerInstance.cpp b/lib/Frontend/CompilerInstance.cpp index 395d85f774..9f69e9c47f 100644 --- a/lib/Frontend/CompilerInstance.cpp +++ b/lib/Frontend/CompilerInstance.cpp @@ -154,11 +154,14 @@ static void SetUpDiagnosticLog(DiagnosticOptions *DiagOpts, } // Chain in the diagnostic client which will log the diagnostics. - LogDiagnosticPrinter *Logger = - new LogDiagnosticPrinter(*OS, DiagOpts, std::move(StreamOwner)); + auto Logger = llvm::make_unique(*OS, DiagOpts, + std::move(StreamOwner)); if (CodeGenOpts) Logger->setDwarfDebugFlags(CodeGenOpts->DwarfDebugFlags); - Diags.setClient(new ChainedDiagnosticConsumer(Diags.takeClient(), Logger)); + assert(Diags.ownsClient()); + Diags.setClient(new ChainedDiagnosticConsumer( + std::unique_ptr(Diags.takeClient()), + std::move(Logger))); } static void SetupSerializedDiagnostics(DiagnosticOptions *DiagOpts, @@ -174,11 +177,13 @@ static void SetupSerializedDiagnostics(DiagnosticOptions *DiagOpts, return; } - DiagnosticConsumer *SerializedConsumer = + auto SerializedConsumer = clang::serialized_diags::create(std::move(OS), DiagOpts); - Diags.setClient(new ChainedDiagnosticConsumer(Diags.takeClient(), - SerializedConsumer)); + assert(Diags.ownsClient()); + Diags.setClient(new ChainedDiagnosticConsumer( + std::unique_ptr(Diags.takeClient()), + std::move(SerializedConsumer))); } void CompilerInstance::createDiagnostics(DiagnosticConsumer *Client, diff --git a/lib/Frontend/SerializedDiagnosticPrinter.cpp b/lib/Frontend/SerializedDiagnosticPrinter.cpp index 66b3333524..15f78d2525 100644 --- a/lib/Frontend/SerializedDiagnosticPrinter.cpp +++ b/lib/Frontend/SerializedDiagnosticPrinter.cpp @@ -236,9 +236,9 @@ private: namespace clang { namespace serialized_diags { -DiagnosticConsumer *create(std::unique_ptr OS, - DiagnosticOptions *diags) { - return new SDiagsWriter(std::move(OS), diags); +std::unique_ptr create(std::unique_ptr OS, + DiagnosticOptions *diags) { + return llvm::make_unique(std::move(OS), diags); } } // end namespace serialized_diags } // end namespace clang