diff options
Diffstat (limited to 'gcc/gcc.c')
-rw-r--r-- | gcc/gcc.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/gcc/gcc.c b/gcc/gcc.c index b7e9a1df339..c606773f42e 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -330,6 +330,7 @@ static int default_arg (const char *, int); static void set_multilib_dir (void); static void print_multilib_info (void); static void perror_with_name (const char *); +static void fatal_ice (const char *, ...) ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN; static void notice (const char *, ...) ATTRIBUTE_PRINTF_1; static void display_help (void); static void add_preprocessor_option (const char *, int); @@ -2997,12 +2998,12 @@ execute (void) } else #endif - fatal ("\ + fatal_ice ("\ Internal error: %s (program %s)\n\ Please submit a full bug report.\n\ See %s for instructions.", - strsignal (WTERMSIG (status)), commands[i].prog, - bug_report_url); + strsignal (WTERMSIG (status)), commands[i].prog, + bug_report_url); } else if (WIFEXITED (status) && WEXITSTATUS (status) >= MIN_FATAL_STATUS) @@ -6818,12 +6819,27 @@ perror_with_name (const char *name) void fancy_abort (const char *file, int line, const char *func) { - fatal ("internal gcc abort in %s, at %s:%d", func, file, line); + fatal_ice ("internal gcc abort in %s, at %s:%d", func, file, line); } /* Output an error message and exit. */ void +fatal_ice (const char *cmsgid, ...) +{ + va_list ap; + + va_start (ap, cmsgid); + + fprintf (stderr, "%s: ", programname); + vfprintf (stderr, _(cmsgid), ap); + va_end (ap); + fprintf (stderr, "\n"); + delete_temp_files (); + exit (pass_exit_codes ? ICE_EXIT_CODE : 1); +} + +void fatal (const char *cmsgid, ...) { va_list ap; |