This, almost obvious, patch merges the older SIGPIPE conditional into the new switch I added. I found the FALLTHROUGH marker needed to be outside the #if, which was a little annoying.

I changed the backtrace error message to also explicitly say it was a signal wot did it.

ok?

nathan
--
Nathan Sidwell
2017-08-16  Nathan Sidwell  <nat...@acm.org>

        * gcc.c (execute): Fold SIGPIPE handling into switch
        statement. Adjust internal error message.

Index: gcc.c
===================================================================
--- gcc.c       (revision 251119)
+++ gcc.c       (working copy)
@@ -3135,44 +3135,45 @@ execute (void)
        int status = statuses[i];
 
        if (WIFSIGNALED (status))
-         {
+         switch (WTERMSIG (status))
+           {
+           case SIGINT:
+           case SIGQUIT:
+           case SIGKILL:
+           case SIGTERM:
+             /* The user (or environment) did something to the
+                inferior.  Making this an ICE confuses the user into
+                thinking there's a compiler bug.  Much more likely is
+                the user or OOM killer nuked it.  */
+             fatal_error (input_location,
+                          "%s signal terminated program %s",
+                          strsignal (WTERMSIG (status)),
+                          commands[i].prog);
+             break;
+
 #ifdef SIGPIPE
-           /* SIGPIPE is a special case.  It happens in -pipe mode
-              when the compiler dies before the preprocessor is done,
-              or the assembler dies before the compiler is done.
-              There's generally been an error already, and this is
-              just fallout.  So don't generate another error unless
-              we would otherwise have succeeded.  */
-           if (WTERMSIG (status) == SIGPIPE
-               && (signal_count || greatest_status >= MIN_FATAL_STATUS))
-             {
-               signal_count++;
-               ret_code = -1;
-             }
-           else
-#endif
-             switch (WTERMSIG (status))
+           case SIGPIPE:
+             /* SIGPIPE is a special case.  It happens in -pipe mode
+                when the compiler dies before the preprocessor is
+                done, or the assembler dies before the compiler is
+                done.  There's generally been an error already, and
+                this is just fallout.  So don't generate another
+                error unless we would otherwise have succeeded.  */
+             if (signal_count || greatest_status >= MIN_FATAL_STATUS)
                {
-               case SIGINT:
-               case SIGQUIT:
-               case SIGKILL:
-               case SIGTERM:
-                 /* The user (or environment) did something to the
-                    inferior.  Making this an ICE confuses the user
-                    into thinking there's a compiler bug.  Much more
-                    likely is the user or OOM killer nuked it.  */
-                 fatal_error (input_location,
-                              "%s signal terminated program %s",
-                              strsignal (WTERMSIG (status)),
-                              commands[i].prog);
+                 signal_count++;
+                 ret_code = -1;
                  break;
-               default:
-                 /* The inferior failed to catch the signal.  */
-                 internal_error_no_backtrace ("%s (program %s)",
-                                              strsignal (WTERMSIG (status)),
-                                              commands[i].prog);
                }
-         }
+#endif
+             /* FALLTHROUGH */
+
+           default:
+             /* The inferior failed to catch the signal.  */
+             internal_error_no_backtrace ("%s signal terminated program %s",
+                                          strsignal (WTERMSIG (status)),
+                                          commands[i].prog);
+           }
        else if (WIFEXITED (status)
                 && WEXITSTATUS (status) >= MIN_FATAL_STATUS)
          {

Reply via email to