[PATCH] PrettyStackTrace should use ManagedStatic for its ThreadLocal
Dan Gohman
sunfish at google.com
Thu Sep 12 20:48:29 PDT 2013
On Thu, Sep 12, 2013 at 6:33 PM, Filip Pizlo <fpizlo at apple.com> wrote:
>
> On Sep 12, 2013, at 5:49 PM, Dan Gohman <sunfish at google.com> wrote:
>
> On Thu, Sep 12, 2013 at 5:00 PM, Filip Pizlo <fpizlo at apple.com> wrote:
>
> llvm::outs() has a static local that closes stdout in its destructor.
> Obviously, this *really* has to run atexit, and probably can't run at
> llvm_shutdown() time. Alternatively, it shouldn't close stdout.
>
>
> Is the issue just that you want it to flush its output?
>
>
> The issue is that it needs to detect pending I/O errors.
>
>
> What would you do with pending I/O errors in an atexit() handler?
The code is out there :-). It calls report_fatal_error.
>
>
> In that case why not do the equivalent of _setvbuf?
>
>
> _setvbuf is for libc buffering. raw_ostream's implementation was
> designed to avoid libc buffering because it wasn't as fast.
>
>
> I understand that _setvbuf is for libc. But why can't raw_ostream do the
> equivalent for the purpose of llvm::outs()? Is the concern that a program
> might use outs() (i.e. outputting to stdout) so heavily that buffering
> becomes critical?
I don't understand what you're asking here. raw_ostream is a simple
utility for simple compiler-like tools. It's useful for these tools to
exit with a non-zero exit status if they encounter any output error.
raw_ostream's current design achieves this automatically, and by
default (though it can be overridden).
Dan
More information about the llvm-commits
mailing list