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
This commit is contained in:
Alexander Kornienko
2014-11-13 13:08:27 +00:00
parent d5e95b57e0
commit 254b7dba27
2 changed files with 17 additions and 6 deletions

View File

@@ -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<DiagnosticConsumer>(Diags.takeClient()),
std::move(SerializedConsumer)));
if (Diags.ownsClient()) {
Diags.setClient(new ChainedDiagnosticConsumer(
std::unique_ptr<DiagnosticConsumer>(Diags.takeClient()),
std::move(SerializedConsumer)));
} else {
Diags.setClient(new ChainedDiagnosticConsumer(
Diags.takeClient(), std::move(SerializedConsumer)));
}
}
void CompilerInstance::createDiagnostics(DiagnosticConsumer *Client,