diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/gcc.c | 24 |
2 files changed, 26 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d899430..c95dc28 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-08-15 Nathan Sidwell <nathan@acm.org> + + * gcc.c (execute): Emit friendlier message if inferior is killed + by an external cause. + 2017-08-15 Richard Biener <rguenther@suse.de> PR tree-optimization/81790 @@ -3151,9 +3151,27 @@ execute (void) } else #endif - internal_error_no_backtrace ("%s (program %s)", - strsignal (WTERMSIG (status)), - commands[i].prog); + 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; + default: + /* The inferior failed to catch the signal. */ + internal_error_no_backtrace ("%s (program %s)", + strsignal (WTERMSIG (status)), + commands[i].prog); + } } else if (WIFEXITED (status) && WEXITSTATUS (status) >= MIN_FATAL_STATUS) |