<div dir="rtl"><div dir="rtl" class="gmail_msg"><div dir="ltr" class="gmail_msg">stdout is special since getFD (pre-commit) always returns the same file descriptor, STDOUT_FILENO (1) whereas for regular files openFileForWrite will return new (unique) file descriptor and then there is no problem of closing one of them.</div><div dir="ltr" class="gmail_msg"><br class="gmail_msg"></div><div dir="ltr" class="gmail_msg">What will happen when you open the same file with two file descriptors and write there? probably intermixed output, depending on file exclusivity flags and buffers? dono. With stdout it works intermixed which is actually ok for many cases, as long you don't depend on order.</div><div dir="ltr" class="gmail_msg"><br class="gmail_msg"></div><div dir="ltr" class="gmail_msg">I'll update the patch.</div><div dir="ltr" class="gmail_msg"><br class="gmail_msg"></div><div dir="ltr" class="gmail_msg"><br class="gmail_msg"></div><div dir="ltr" class="gmail_msg"><br class="gmail_msg"></div></div><br class="gmail_msg"><div class="gmail_quote gmail_msg"><div dir="rtl" class="gmail_msg">‫בתאריך יום ה׳, 30 במרץ 2017 ב-17:34 מאת ‪Rafael Espíndola‬‏ <‪<a href="mailto:rafael.espindola@gmail.com" class="gmail_msg" target="_blank">rafael.espindola@gmail.com</a>‬‏>:‬<br class="gmail_msg"></div></div><div class="gmail_quote gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 30 March 2017 at 10:11, Yaron Keren <<a href="mailto:yaron.keren@gmail.com" class="gmail_msg" target="_blank">yaron.keren@gmail.com</a>> wrote:<br class="gmail_msg">
> Dan's point was that outputing mixed two streams to - is always an error so<br class="gmail_msg">
> the new testcase<br class="gmail_msg">
><br class="gmail_msg">
>    llc %s -o=- -pass-remarks-output=- -filetype=asm<br class="gmail_msg">
><br class="gmail_msg">
> should fail by design. This restriction was enforced by<br class="gmail_msg">
> SafelyCloseFileDescriptor() and error_detected().  Adding dup() circumvented<br class="gmail_msg">
> the check, as the file descriptors are different now so it's no longer an<br class="gmail_msg">
> error to mix streams.<br class="gmail_msg">
<br class="gmail_msg">
But it should also be an error if the two file streams refer to the<br class="gmail_msg">
same regular file, no? Why is stdout a special case?<br class="gmail_msg">
<br class="gmail_msg">
> In addition, before this commit, STDOUT_FILENO was closed upon exit but now<br class="gmail_msg">
> a side effect of the dups is that only its dups are closed and STDOUT_FILENO<br class="gmail_msg">
> is closed by the OS upon process termination.<br class="gmail_msg">
<br class="gmail_msg">
But that was a crash, not a real user error. Is there a way to detect<br class="gmail_msg">
if we have two fds that refer to the same underlying file and error on<br class="gmail_msg">
that?<br class="gmail_msg">
<br class="gmail_msg">
> Achieving both changes, allowing mixed two streams into and not closing<br class="gmail_msg">
> STDOUT_FILENO could be done by never closing STDOUT_FILENO as suggested in<br class="gmail_msg">
> <a href="https://reviews.llvm.org/D13128" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D13128</a>. This is simpler and saves duping and<br class="gmail_msg">
> closing dups.<br class="gmail_msg">
<br class="gmail_msg">
I see. That is the point I was missing.  Sorry, yes, the current<br class="gmail_msg">
change in a convoluted way of just not closing the original file<br class="gmail_msg">
descriptor. Would you mind posting that patch on top of current trunk<br class="gmail_msg">
as a cleanup?<br class="gmail_msg">
<br class="gmail_msg">
The more I think about it the more I feel that we should support<br class="gmail_msg">
having two streams to the same file. The output is intermixed, but the<br class="gmail_msg">
complication of always producing a good error is probably not worth<br class="gmail_msg">
it. Mixing two streams might also be harmless in some cases. For<br class="gmail_msg">
example, a FileCheck test using CHECK-DAG.<br class="gmail_msg">
<br class="gmail_msg">
Cheers,<br class="gmail_msg">
Rafael<br class="gmail_msg">
</blockquote></div></div>