[cfe-users] Redirecting clang tooling errors

Lucas Soltic via cfe-users cfe-users at lists.llvm.org
Thu Aug 4 11:55:23 PDT 2016


I am trying to redirect the output emitted when running a tool through clang::tooling::runToolOnCode() to a buffer or string instead of stderr (llvm::errs()). I'm using clangTooling from release 3.9.

When looking at clangTooling code and following the execution flow, I have found the following:
calls clang::tooling::runToolOnCodeWithArgs()
which calls clang::tooling::ToolInvocation::run()
which contains the following :
TextDiagnosticPrinter DiagnosticPrinter(llvm::errs(), &*DiagOpts);
DiagnosticsEngine Diagnostics(
    IntrusiveRefCntPtr<clang::DiagnosticIDs>(new DiagnosticIDs()), &*DiagOpts,
    DiagConsumer ? DiagConsumer : &DiagnosticPrinter, false);

So at this point I guess I'm stuck because everything is redirected to stderr…
Did I miss something or is there really this limitation?

I also thought of redirecting stderr to somewhere else but… I can't see how it will fit my needs as in the end I want to call clang::tooling::runToolOnCode() on different files in parallel, all of it in the same process ; so I'll get stderr mixed with output from several executions. The best solution would obviously being able to provide the DiagnosticConsumer but at the moment everything looks hardcoded.

Best regards,
L. Soltic

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-users/attachments/20160804/abd37b79/attachment.html>

More information about the cfe-users mailing list