aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Reichelt <reichelt@igpm.rwth-aachen.de>2006-03-22 19:36:22 +0000
committerVolker Reichelt <reichelt@gcc.gnu.org>2006-03-22 19:36:22 +0000
commitddaf3b8666fb3cf656b439b36807e4fbd44f9755 (patch)
tree0ef1c23dc84a162b943f0131666ec56296a921be
parentd67ab5eef80ed2d4891562bf5ff791c1b2af4a97 (diff)
downloadgcc-ddaf3b8666fb3cf656b439b36807e4fbd44f9755.zip
gcc-ddaf3b8666fb3cf656b439b36807e4fbd44f9755.tar.gz
gcc-ddaf3b8666fb3cf656b439b36807e4fbd44f9755.tar.bz2
re PR driver/22600 (Exit code should be different from 1 for internal compiler error)
PR driver/22600 * system.h (ICE_EXIT_CODE): New macro. * diagnostic.c (diagnostic_count_diagnostic): Exit with ICE_EXIT_CODE. (diagnostic_action_after_output): Likewise. * gcc.c (fatal_ice): New function. (execute): Use it instead of fatal. (fancy_abort): Likewise. * doc/invoke.texi (-pass-exit-codes): Document return code for ICEs. * fortran/error.c (gfc_fatal_error): Return ICE_EXIT_CODE instead of 4. From-SVN: r112292
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/diagnostic.c4
-rw-r--r--gcc/doc/invoke.texi3
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/error.c2
-rw-r--r--gcc/gcc.c24
-rw-r--r--gcc/system.h2
7 files changed, 43 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1d1e5b5..fe517ce 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2006-03-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR driver/22600
+ * system.h (ICE_EXIT_CODE): New macro.
+ * diagnostic.c (diagnostic_count_diagnostic): Exit with ICE_EXIT_CODE.
+ (diagnostic_action_after_output): Likewise.
+ * gcc.c (fatal_ice): New function.
+ (execute): Use it instead of fatal.
+ (fancy_abort): Likewise.
+ * doc/invoke.texi (-pass-exit-codes): Document return code for ICEs.
+
2006-03-22 Jeff Law <law@redhat.com>
* loop-unroll.c (analyze_iv_to_split_insn): Handle
diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c
index b671b1a..3691477 100644
--- a/gcc/diagnostic.c
+++ b/gcc/diagnostic.c
@@ -188,7 +188,7 @@ diagnostic_count_diagnostic (diagnostic_context *context,
expanded_location s = expand_location (diagnostic->location);
fnotice (stderr, "%s:%d: confused by earlier errors, bailing out\n",
s.file, s.line);
- exit (FATAL_EXIT_CODE);
+ exit (ICE_EXIT_CODE);
}
#endif
if (context->internal_error)
@@ -263,7 +263,7 @@ diagnostic_action_after_output (diagnostic_context *context,
fnotice (stderr, "Please submit a full bug report,\n"
"with preprocessed source if appropriate.\n"
"See %s for instructions.\n", bug_report_url);
- exit (FATAL_EXIT_CODE);
+ exit (ICE_EXIT_CODE);
case DK_FATAL:
if (context->abort_on_error)
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 5b4e8be..16ec89b 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -957,7 +957,8 @@ Normally the @command{gcc} program will exit with the code of 1 if any
phase of the compiler returns a non-success return code. If you specify
@option{-pass-exit-codes}, the @command{gcc} program will instead return with
numerically highest error produced by any phase that returned an error
-indication.
+indication. The C, C++, and Fortran frontends return 4, if an internal
+compiler error is encountered.
@end table
If you only want some of the stages of compilation, you can use
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index da2cc08..e6ce54a 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2006-03-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR driver/22600
+ * error.c (gfc_fatal_error): Return ICE_EXIT_CODE instead of 4.
+
2006-03-22 Thomas Koenig <Thomas.Koenig@online.de>
PR fortran/19303
diff --git a/gcc/fortran/error.c b/gcc/fortran/error.c
index 4c82c4a..435fc16 100644
--- a/gcc/fortran/error.c
+++ b/gcc/fortran/error.c
@@ -677,7 +677,7 @@ gfc_internal_error (const char *format, ...)
error_print ("", format, argp);
va_end (argp);
- exit (4);
+ exit (ICE_EXIT_CODE);
}
diff --git a/gcc/gcc.c b/gcc/gcc.c
index b7e9a1d..c606773 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;
diff --git a/gcc/system.h b/gcc/system.h
index c89394b..4d191e7 100644
--- a/gcc/system.h
+++ b/gcc/system.h
@@ -227,6 +227,8 @@ extern int errno;
# endif
#endif
+#define ICE_EXIT_CODE 4
+
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif