diff options
4 files changed, 19 insertions, 16 deletions
diff --git a/clang/include/clang/Frontend/ChainedDiagnosticConsumer.h b/clang/include/clang/Frontend/ChainedDiagnosticConsumer.h index 11762a97cfc..372b381cff6 100644 --- a/clang/include/clang/Frontend/ChainedDiagnosticConsumer.h +++ b/clang/include/clang/Frontend/ChainedDiagnosticConsumer.h @@ -26,11 +26,9 @@ class ChainedDiagnosticConsumer : public DiagnosticConsumer { std::unique_ptr<DiagnosticConsumer> Secondary; public: - ChainedDiagnosticConsumer(DiagnosticConsumer *_Primary, - DiagnosticConsumer *_Secondary) { - Primary.reset(_Primary); - Secondary.reset(_Secondary); - } + ChainedDiagnosticConsumer(std::unique_ptr<DiagnosticConsumer> Primary, + std::unique_ptr<DiagnosticConsumer> Secondary) + : Primary(std::move(Primary)), Secondary(std::move(Secondary)) {} void BeginSourceFile(const LangOptions &LO, const Preprocessor *PP) override { diff --git a/clang/include/clang/Frontend/SerializedDiagnosticPrinter.h b/clang/include/clang/Frontend/SerializedDiagnosticPrinter.h index fce795b4a4f..207f9f19846 100644 --- a/clang/include/clang/Frontend/SerializedDiagnosticPrinter.h +++ b/clang/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<raw_ostream> OS, - DiagnosticOptions *diags); +std::unique_ptr<DiagnosticConsumer> create(std::unique_ptr<raw_ostream> OS, + DiagnosticOptions *diags); } // end serialized_diags namespace } // end clang namespace diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp index 395d85f7740..9f69e9c47f0 100644 --- a/clang/lib/Frontend/CompilerInstance.cpp +++ b/clang/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<LogDiagnosticPrinter>(*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<DiagnosticConsumer>(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<DiagnosticConsumer>(Diags.takeClient()), + std::move(SerializedConsumer))); } void CompilerInstance::createDiagnostics(DiagnosticConsumer *Client, diff --git a/clang/lib/Frontend/SerializedDiagnosticPrinter.cpp b/clang/lib/Frontend/SerializedDiagnosticPrinter.cpp index 66b3333524d..15f78d25259 100644 --- a/clang/lib/Frontend/SerializedDiagnosticPrinter.cpp +++ b/clang/lib/Frontend/SerializedDiagnosticPrinter.cpp @@ -236,9 +236,9 @@ private: namespace clang { namespace serialized_diags { -DiagnosticConsumer *create(std::unique_ptr<raw_ostream> OS, - DiagnosticOptions *diags) { - return new SDiagsWriter(std::move(OS), diags); +std::unique_ptr<DiagnosticConsumer> create(std::unique_ptr<raw_ostream> OS, + DiagnosticOptions *diags) { + return llvm::make_unique<SDiagsWriter>(std::move(OS), diags); } } // end namespace serialized_diags } // end namespace clang |