<div dir="ltr">Would it be appropriate for lld's other output to go to standard error instead of standard output, since standard output may be used for YAML output?<div><div class="gmail_extra"><br>Dan</div><div class="gmail_extra">
<br><div class="gmail_quote">On Wed, Aug 14, 2013 at 12:53 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>
lld takes a -emit-yaml option, which emits the intermediate representation(atoms) in YAML form.<br>
<br>
By default output goes to stdout, the user can control it by using the -o 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 -emit-yaml, it starts to get this error.<br>
<br>
If there is a restriction like this, possibly it has to be mentioned somewhere for usecases (or) raw_fd_ostream should not be accepting a '-' in the argument.<br>
<br>
What do you think ?<br>
<br>
Thanks<br>
<br>
Shankar Easwaran<div><div><br>
<br>
On 8/14/2013 2:02 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>
The high-level answer is that library code shouldn't hardcode output 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>
<<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>
Hi,<br>
<br>
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></div>
______________________________<u></u>**_________________<div><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>


<br>
</blockquote></blockquote><div><div>
<br>
<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></div></div>