<div dir="ltr">This patch makes a lot of posix assumptions, and that header file doesn't exist on Windows. I reverted this to fix the build, but you might want to reconsider how this is designed.</div><br><div class="gmail_quote"><div dir="ltr">On Fri, Oct 12, 2018 at 10:24 AM Nick Desaulniers via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: nickdesaulniers<br>
Date: Fri Oct 12 10:22:46 2018<br>
New Revision: 344375<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=344375&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=344375&view=rev</a><br>
Log:<br>
[Driver] check for exit code from SIGPIPE<br>
<br>
Summary:<br>
D53000 adds a special exit code for SIGPIPE (writing to a closed<br>
reader), and rather than print a fatal warning, skips printing the<br>
error.  This can be seen commonly from piping into head, tee, or<br>
split.<br>
<br>
Fixes PR25349, rdar://problem/14285346, <a href="https://buganizer.corp.google.com/77310947" target="_blank">b/77310947</a>.<br>
<br>
Reviewers: jfb<br>
<br>
Reviewed By: jfb<br>
<br>
Subscribers: cfe-commits, thakis, srhines<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D53001" rel="noreferrer" target="_blank">https://reviews.llvm.org/D53001</a><br>
<br>
Modified:<br>
    cfe/trunk/lib/Driver/Driver.cpp<br>
<br>
Modified: cfe/trunk/lib/Driver/Driver.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=344375&r1=344374&r2=344375&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=344375&r1=344374&r2=344375&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/Driver.cpp (original)<br>
+++ cfe/trunk/lib/Driver/Driver.cpp Fri Oct 12 10:22:46 2018<br>
@@ -78,6 +78,7 @@<br>
 #include "llvm/Support/raw_ostream.h"<br>
 #include <map><br>
 #include <memory><br>
+#include <sysexits.h><br>
 #include <utility><br>
 #if LLVM_ON_UNIX<br>
 #include <unistd.h> // getpid<br>
@@ -1388,8 +1389,9 @@ int Driver::ExecuteCompilation(<br>
<br>
   // Otherwise, remove result files and print extra information about abnormal<br>
   // failures.<br>
+  int Res = 0;<br>
   for (const auto &CmdPair : FailingCommands) {<br>
-    int Res = CmdPair.first;<br>
+    int CommandRes = CmdPair.first;<br>
     const Command *FailingCommand = CmdPair.second;<br>
<br>
     // Remove result files if we're not saving temps.<br>
@@ -1398,10 +1400,17 @@ int Driver::ExecuteCompilation(<br>
       C.CleanupFileMap(C.getResultFiles(), JA, true);<br>
<br>
       // Failure result files are valid unless we crashed.<br>
-      if (Res < 0)<br>
+      if (CommandRes < 0)<br>
         C.CleanupFileMap(C.getFailureResultFiles(), JA, true);<br>
     }<br>
<br>
+    // llvm/lib/Support/Unix/Signals.inc will exit with a special return code<br>
+    // for SIGPIPE. Do not print diagnostics for this case.<br>
+    if (CommandRes == EX_IOERR) {<br>
+      Res = CommandRes;<br>
+      continue;<br>
+    }<br>
+<br>
     // Print extra information about abnormal failures, if possible.<br>
     //<br>
     // This is ad-hoc, but we don't want to be excessively noisy. If the result<br>
@@ -1411,17 +1420,17 @@ int Driver::ExecuteCompilation(<br>
     // diagnostics, so always print the diagnostic there.<br>
     const Tool &FailingTool = FailingCommand->getCreator();<br>
<br>
-    if (!FailingCommand->getCreator().hasGoodDiagnostics() || Res != 1) {<br>
+    if (!FailingCommand->getCreator().hasGoodDiagnostics() || CommandRes != 1) {<br>
       // FIXME: See FIXME above regarding result code interpretation.<br>
-      if (Res < 0)<br>
+      if (CommandRes < 0)<br>
         Diag(clang::diag::err_drv_command_signalled)<br>
             << FailingTool.getShortName();<br>
       else<br>
-        Diag(clang::diag::err_drv_command_failed) << FailingTool.getShortName()<br>
-                                                  << Res;<br>
+        Diag(clang::diag::err_drv_command_failed)<br>
+            << FailingTool.getShortName() << CommandRes;<br>
     }<br>
   }<br>
-  return 0;<br>
+  return Res;<br>
 }<br>
<br>
 void Driver::PrintHelp(bool ShowHidden) const {<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>