diff mbox

Further driver signal cleanup

Message ID 758d5cd0-06c8-fa4a-e9f5-31089470b7bd@acm.org
State New
Headers show

Commit Message

Nathan Sidwell Aug. 16, 2017, 6:24 p.m. UTC
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

Comments

Marek Polacek Aug. 16, 2017, 6:29 p.m. UTC | #1
On Wed, Aug 16, 2017 at 02:24:10PM -0400, Nathan Sidwell wrote:
> 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.

True, it needs to precede the casea token.  Or you can use gcc_fallthrough ();
which can be inside #if/{}/...

	Marek
diff mbox

Patch

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)
 	  {