<div dir="ltr">Standard error is what many tools, including clang for example, use for their --verbose output. This is appropriate because it leaves standard output available for regular output data, which the user may wish to capture in a file or a pipe.<div>
<br></div><div>Dan</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Aug 14, 2013 at 2:48 PM, Shankar Easwaran <span dir="ltr"><<a href="mailto:shankare@codeaurora.org" target="_blank">shankare@codeaurora.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Dan,<br>
<br>
The other messages, need to go to stdout as well. Using stderr to output for a switch like --verbose is wrong in my opinion.<div><div class="h5"><br>
<br>
On 8/14/2013 4:44 PM, Dan Gohman wrote:<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
Would it be appropriate for lld's other output to go to standard error<br>
instead of standard output, since standard output may be used for YAML<br>
output?<br>
<br>
Dan<br>
<br>
On Wed, Aug 14, 2013 at 12:53 PM, Shankar Easwaran<br>
<<a href="mailto:shankare@codeaurora.org" target="_blank">shankare@codeaurora.org</a>><u></u>wrote:<br>
<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
Hi Dan,<br>
<br>
lld takes a -emit-yaml option, which emits the intermediate<br>
representation(atoms) in YAML form.<br>
<br>
By default output goes to stdout, the user can control it by using the -o<br>
option too.<br>
<br>
The way its handled is, similiar to this piece of pseudo-code<br>
<br>
if (dash_o_option)<br>
     outputFile = dash_o_option->value()<br>
else<br>
    outputFile = "-"<br>
<br>
When lld tries to mix things that go to stdout using llvm::outs() and<br>
-emit-yaml, it starts to get this error.<br>
<br>
If there is a restriction like this, possibly it has to be mentioned<br>
somewhere for usecases (or) raw_fd_ostream should not be accepting a '-' in<br>
the argument.<br>
<br>
What do you think ?<br>
<br>
Thanks<br>
<br>
Shankar Easwaran<br>
<br>
<br>
On 8/14/2013 2:02 PM, Dan Gohman wrote:<br>
<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
The high-level answer is that library code shouldn't hardcode output<br>
paths,<br>
including "-" and including using llvm::outs(). Library code should (in<br>
general) instead accept an ostream in its API and write to wherever it is<br>
being asked to write. If this is followed, the only place in any program<br>
using llvm::outs() is code which is not part of a "library" -- i.e. it is<br>
the "main" code, and it should only do so if it is a program which doesn't<br>
open file names which could be "-".<br>
<br>
Do you have a use-case where this restriction is too restrictive?<br>
<br>
As a random aside, a more aggressive answer could be that "-" is a kind of<br>
hack, and that it would be a better approach to use /dev/stdout and<br>
/dev/stdin instead of "-", because they wouldn't require special-case<br>
logic. Unfortunately, this may not be sufficiently portable.<br>
<br>
Dan<br>
<br>
<br>
On Wed, Aug 14, 2013 at 8:28 AM, Shankar Easwaran<br></div></div>
<<a href="mailto:shankare@codeaurora.org" target="_blank">shankare@codeaurora.org</a>>**<u></u>wrote:<br>
<br>
  Hi,<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">
When I run the below example, it results in :-<br>
<br>
hello<br>
world<br>
LLVM ERROR: IO failure on output stream.<br>
<br>
Testcase :-<br>
<br>
#include <llvm/Support/raw_ostream.h><br>
<br>
int fn() {<br>
    std::string errorInfo;<br>
    llvm::raw_fd_ostream out("-", errorInfo);<br>
    out << "world\n";<br>
    return 0;<br>
}<br>
int main(int argc, char **argv) {<br>
    llvm::outs() << "hello\n";<br>
    fn();<br>
    return 0;<br>
}<br>
<br>
I tried to fix this by making llvm::outs(), not close the stdout<br>
descriptor, but I think its wrong. Recommendations ?<br>
<br>
Thanks<br>
<br>
Shankar Easwaran<br>
<br>
--<br>
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted<br>
by the Linux Foundation<br>
<br>
<br>
<br></div>
______________________________<u></u>****_________________<div class="im"><br>
<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
</div><a href="http://lists.cs.uiuc.edu/****mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/****<u></u>mailman/listinfo/llvmdev</a><<a href="http://lists.cs.uiuc.edu/**mailman/listinfo/llvmdev" target="_blank">http:<u></u>//lists.cs.uiuc.edu/**mailman/<u></u>listinfo/llvmdev</a>><br>

<http:**//<a href="http://lists.cs.uiuc.edu/mailman/**listinfo/llvmdev" target="_blank">lists.cs.uiuc.edu/<u></u>mailman/**listinfo/llvmdev</a><<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">htt<u></u>p://lists.cs.uiuc.edu/mailman/<u></u>listinfo/llvmdev</a>><br>

<br>
</blockquote></blockquote><div class="im">
--<br>
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted<br>
by the Linux Foundation<br>
<br>
<br>
</div></blockquote></blockquote>
<br><div class="HOEnZb"><div class="h5">
<br>
-- <br>
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by the Linux Foundation<br>
<br>
</div></div></blockquote></div><br></div>