From 254b7dba27abf991a99df4c4cc12fa88d9b3905f Mon Sep 17 00:00:00 2001 From: Alexander Kornienko Date: Thu, 13 Nov 2014 13:08:27 +0000 Subject: Support non-owned DiagnosticConsumer in SetupSerializedDiagnostics This fixes an assertion when running clang-tidy on a file having --serialize-diagnostics in compiler options. Committing a regression test for clang-tidy separately. Patch by Aaron Wishnick! llvm-svn: 221884 --- clang/lib/Frontend/CompilerInstance.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'clang/lib/Frontend/CompilerInstance.cpp') diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp index 366884ec775..2b7f1832aa4 100644 --- a/clang/lib/Frontend/CompilerInstance.cpp +++ b/clang/lib/Frontend/CompilerInstance.cpp @@ -170,10 +170,14 @@ static void SetupSerializedDiagnostics(DiagnosticOptions *DiagOpts, auto SerializedConsumer = clang::serialized_diags::create(OutputFile, DiagOpts); - assert(Diags.ownsClient()); - Diags.setClient(new ChainedDiagnosticConsumer( - std::unique_ptr(Diags.takeClient()), - std::move(SerializedConsumer))); + if (Diags.ownsClient()) { + Diags.setClient(new ChainedDiagnosticConsumer( + std::unique_ptr(Diags.takeClient()), + std::move(SerializedConsumer))); + } else { + Diags.setClient(new ChainedDiagnosticConsumer( + Diags.takeClient(), std::move(SerializedConsumer))); + } } void CompilerInstance::createDiagnostics(DiagnosticConsumer *Client, -- cgit v1.2.3