[llvm-dev] Dealing with llvm::errs() and friends in dynamic libs on Windows
Friedman, Eli via llvm-dev
llvm-dev at lists.llvm.org
Tue Sep 11 11:46:29 PDT 2018
On 9/9/2018 9:30 AM, Janus Lynggaard Thorborg via llvm-dev wrote:
> Hello,
>
> outs() and errs() are routinely used around llvm and cannot really be
> disabled. It would seem that in certain types of Windows applications,
> stderr and stdout are not opened by default, which is an assumption of
> llvm.
LLVM libraries shouldn't write to outs() unless you explicitly request
it; at best it points somewhere useless, at worst it'll corrupt output
written to stdout. We consider it a bug if this happens. (Quickly
grep'ing, it looks like there's a bug where
lib/MC/MCParser/AsmParser.cpp will write to outs() when given a ".print"
directive, but I'm guessing you're very unlikely to run into that.)
The default error reporting mechanism for errors compiling unsupported
LLVM IR constructs writes to errs(), but you can override that by
calling LLVMContext::setDiagnosticHandler(). Otherwise, we consider it a
bug if LLVM libraries write to errs() without an explicit request.
(There's a lot of code which writes to errs, but it's diagnostics which
should not run by default.)
Please report a bug or send a patch if you're running into issues with
some specific construct that causes LLVM to write to outs() or errs()
incorrectly.
>
> This leaves errs() and outs() with an error code, because writing
> calls will fail due to invalid fd handles. Thus, when an llvm lib is
> unloaded, it will terminate the entire process due to a non-zero EC in
> ~raw_fd_ostream() that calls report_fatal_error().
This seems a bit unfriendly, particularly since the error gets delayed
far past the point it would actually be useful, but it probably
indicates something else is going wrong. Even on Unixy systems where
stdout and stderr are usually open, they often don't point anywhere
useful for GUI programs.
-Eli
--
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
More information about the llvm-dev
mailing list