diagnostic.c (finish_abort): Deleted.
Sat Dec 16 10:41:11 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * diagnostic.c (finish_abort): Deleted. (fatal): Add code from fninish_abort. (error_recursion, fancy_abort): Call fatal, not finish_abort. (trim_filename): Remove leading "../". * diagnostic.h (finish_abort): Deleted. * toplev.c (crash_signal): Call fatal, not finish_abort. * stor-layout.c (place_field): Treat overflowing DECL_SIZE_UNIT as if size were variable. * expmed.c (expand_mult): Write REG_EQUAL note with proper mode. From-SVN: r38309
This commit is contained in:
parent
112550d37d
commit
43db5b3c2c
3 changed files with 53 additions and 27 deletions
|
@ -156,6 +156,7 @@ static int diagnostic_lock;
|
||||||
|
|
||||||
/* Return truthvalue if current input file is different from the most recent
|
/* Return truthvalue if current input file is different from the most recent
|
||||||
file involved in a diagnostic message. */
|
file involved in a diagnostic message. */
|
||||||
|
|
||||||
int
|
int
|
||||||
error_module_changed ()
|
error_module_changed ()
|
||||||
{
|
{
|
||||||
|
@ -164,6 +165,7 @@ error_module_changed ()
|
||||||
|
|
||||||
/* Remember current file as being the most recent file involved in a
|
/* Remember current file as being the most recent file involved in a
|
||||||
diagnostic message. */
|
diagnostic message. */
|
||||||
|
|
||||||
void
|
void
|
||||||
record_last_error_module ()
|
record_last_error_module ()
|
||||||
{
|
{
|
||||||
|
@ -171,6 +173,7 @@ record_last_error_module ()
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Same as error_module_changed, but for function. */
|
/* Same as error_module_changed, but for function. */
|
||||||
|
|
||||||
int
|
int
|
||||||
error_function_changed ()
|
error_function_changed ()
|
||||||
{
|
{
|
||||||
|
@ -178,6 +181,7 @@ error_function_changed ()
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Same as record_last_error_module, but for function. */
|
/* Same as record_last_error_module, but for function. */
|
||||||
|
|
||||||
void
|
void
|
||||||
record_last_error_function ()
|
record_last_error_function ()
|
||||||
{
|
{
|
||||||
|
@ -345,6 +349,7 @@ init_output_buffer (buffer, prefix, maximum_length)
|
||||||
|
|
||||||
/* Initialize BUFFER with a NULL prefix and current diagnostic message
|
/* Initialize BUFFER with a NULL prefix and current diagnostic message
|
||||||
length cutoff. */
|
length cutoff. */
|
||||||
|
|
||||||
void
|
void
|
||||||
default_initialize_buffer (buffer)
|
default_initialize_buffer (buffer)
|
||||||
output_buffer *buffer;
|
output_buffer *buffer;
|
||||||
|
@ -365,6 +370,7 @@ reshape_diagnostic_buffer ()
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Reinitialize BUFFER. */
|
/* Reinitialize BUFFER. */
|
||||||
|
|
||||||
void
|
void
|
||||||
output_clear (buffer)
|
output_clear (buffer)
|
||||||
output_buffer *buffer;
|
output_buffer *buffer;
|
||||||
|
@ -623,6 +629,7 @@ wrap_text (buffer, start, end)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Same as wrap_text but wrap text only when in line-wrapping mode. */
|
/* Same as wrap_text but wrap text only when in line-wrapping mode. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
maybe_wrap_text (buffer, start, end)
|
maybe_wrap_text (buffer, start, end)
|
||||||
output_buffer *buffer;
|
output_buffer *buffer;
|
||||||
|
@ -828,6 +835,7 @@ build_message_string VPARAMS ((const char *msgid, ...))
|
||||||
|
|
||||||
/* Return a malloc'd string describing a location. The caller is
|
/* Return a malloc'd string describing a location. The caller is
|
||||||
responsible for freeing the memory. */
|
responsible for freeing the memory. */
|
||||||
|
|
||||||
char *
|
char *
|
||||||
context_as_prefix (file, line, warn)
|
context_as_prefix (file, line, warn)
|
||||||
const char *file;
|
const char *file;
|
||||||
|
@ -851,6 +859,7 @@ context_as_prefix (file, line, warn)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Same as context_as_prefix, but only the source FILE is given. */
|
/* Same as context_as_prefix, but only the source FILE is given. */
|
||||||
|
|
||||||
char *
|
char *
|
||||||
file_name_as_prefix (f)
|
file_name_as_prefix (f)
|
||||||
const char *f;
|
const char *f;
|
||||||
|
@ -1409,6 +1418,12 @@ fatal VPARAMS ((const char *msgid, ...))
|
||||||
msgid = va_arg (ap, const char *);
|
msgid = va_arg (ap, const char *);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (errorcount > 1 || sorrycount > 0)
|
||||||
|
{
|
||||||
|
fprintf (stderr, "confused by earlier errors, bailing out\n");
|
||||||
|
exit (FATAL_EXIT_CODE);
|
||||||
|
}
|
||||||
|
|
||||||
if (fatal_function != 0)
|
if (fatal_function != 0)
|
||||||
(*fatal_function) (_(msgid), &ap);
|
(*fatal_function) (_(msgid), &ap);
|
||||||
|
|
||||||
|
@ -1416,6 +1431,10 @@ fatal VPARAMS ((const char *msgid, ...))
|
||||||
(&dc, msgid, &ap, input_filename, lineno, /* warn = */0);
|
(&dc, msgid, &ap, input_filename, lineno, /* warn = */0);
|
||||||
report_diagnostic (&dc);
|
report_diagnostic (&dc);
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
|
fprintf
|
||||||
|
(stderr, "Please submit a full bug report.\n See %s for instructions.\n",
|
||||||
|
GCCBUGURL);
|
||||||
exit (FATAL_EXIT_CODE);
|
exit (FATAL_EXIT_CODE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1533,6 +1552,7 @@ warning VPARAMS ((const char *msgid, ...))
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Flush diagnostic_buffer content on stderr. */
|
/* Flush diagnostic_buffer content on stderr. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
finish_diagnostic ()
|
finish_diagnostic ()
|
||||||
{
|
{
|
||||||
|
@ -1544,6 +1564,7 @@ finish_diagnostic ()
|
||||||
|
|
||||||
/* Helper subroutine of output_verbatim and verbatim. Do the approriate
|
/* Helper subroutine of output_verbatim and verbatim. Do the approriate
|
||||||
settings needed by BUFFER for a verbatim formatting. */
|
settings needed by BUFFER for a verbatim formatting. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
output_do_verbatim (buffer, msg, args_ptr)
|
output_do_verbatim (buffer, msg, args_ptr)
|
||||||
output_buffer *buffer;
|
output_buffer *buffer;
|
||||||
|
@ -1563,6 +1584,7 @@ output_do_verbatim (buffer, msg, args_ptr)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Output MESSAGE verbatim into BUFFER. */
|
/* Output MESSAGE verbatim into BUFFER. */
|
||||||
|
|
||||||
void
|
void
|
||||||
output_verbatim VPARAMS ((output_buffer *buffer, const char *msg, ...))
|
output_verbatim VPARAMS ((output_buffer *buffer, const char *msg, ...))
|
||||||
{
|
{
|
||||||
|
@ -1582,6 +1604,7 @@ output_verbatim VPARAMS ((output_buffer *buffer, const char *msg, ...))
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Same as above but use diagnostic_buffer. */
|
/* Same as above but use diagnostic_buffer. */
|
||||||
|
|
||||||
void
|
void
|
||||||
verbatim VPARAMS ((const char *msg, ...))
|
verbatim VPARAMS ((const char *msg, ...))
|
||||||
{
|
{
|
||||||
|
@ -1604,6 +1627,7 @@ verbatim VPARAMS ((const char *msg, ...))
|
||||||
should implement their specific diagnostic handling modules. The
|
should implement their specific diagnostic handling modules. The
|
||||||
front-end independent format specifiers are exactly those described
|
front-end independent format specifiers are exactly those described
|
||||||
in the documentation of output_format. */
|
in the documentation of output_format. */
|
||||||
|
|
||||||
void
|
void
|
||||||
report_diagnostic (dc)
|
report_diagnostic (dc)
|
||||||
diagnostic_context *dc;
|
diagnostic_context *dc;
|
||||||
|
@ -1631,21 +1655,21 @@ report_diagnostic (dc)
|
||||||
/* Inform the user that an error occurred while trying to report some
|
/* Inform the user that an error occurred while trying to report some
|
||||||
other error. This indicates catastrophic internal inconsistencies,
|
other error. This indicates catastrophic internal inconsistencies,
|
||||||
so give up now. But do try to flush out the previous error. */
|
so give up now. But do try to flush out the previous error. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
error_recursion ()
|
error_recursion ()
|
||||||
{
|
{
|
||||||
if (diagnostic_lock < 3)
|
if (diagnostic_lock < 3)
|
||||||
finish_diagnostic ();
|
finish_diagnostic ();
|
||||||
|
|
||||||
fputs (_("Internal compiler error: Error reporting routines re-entered.\n"),
|
fatal ("Internal compiler error: Error reporting routines re-entered.");
|
||||||
stderr);
|
|
||||||
finish_abort ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Given a partial pathname as input, return another pathname that
|
/* Given a partial pathname as input, return another pathname that
|
||||||
shares no directory elements with the pathname of __FILE__. This
|
shares no directory elements with the pathname of __FILE__. This
|
||||||
is used by fancy_abort() to print `Internal compiler error in expr.c'
|
is used by fancy_abort() to print `Internal compiler error in expr.c'
|
||||||
instead of `Internal compiler error in ../../GCC/gcc/expr.c'. */
|
instead of `Internal compiler error in ../../GCC/gcc/expr.c'. */
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
trim_filename (name)
|
trim_filename (name)
|
||||||
const char *name;
|
const char *name;
|
||||||
|
@ -1653,7 +1677,29 @@ trim_filename (name)
|
||||||
static const char this_file[] = __FILE__;
|
static const char this_file[] = __FILE__;
|
||||||
const char *p = name, *q = this_file;
|
const char *p = name, *q = this_file;
|
||||||
|
|
||||||
while (*p == *q && *p != 0 && *q != 0) p++, q++;
|
/* First skip any "../" in each filename. This allows us to give a proper
|
||||||
|
reference to a file in a subdirectory. */
|
||||||
|
while (p[0] == '.' && p[1] == '.'
|
||||||
|
&& (p[2] == DIR_SEPARATOR
|
||||||
|
#ifdef DIR_SEPARATOR_2
|
||||||
|
|| p[2] == DIR_SEPARATOR_2
|
||||||
|
#endif
|
||||||
|
))
|
||||||
|
p += 3;
|
||||||
|
|
||||||
|
while (q[0] == '.' && q[1] == '.'
|
||||||
|
&& (q[2] == DIR_SEPARATOR
|
||||||
|
#ifdef DIR_SEPARATOR_2
|
||||||
|
|| p[2] == DIR_SEPARATOR_2
|
||||||
|
#endif
|
||||||
|
))
|
||||||
|
q += 3;
|
||||||
|
|
||||||
|
/* Now skip any parts the two filenames have in common. */
|
||||||
|
while (*p == *q && *p != 0 && *q != 0)
|
||||||
|
p++, q++;
|
||||||
|
|
||||||
|
/* Now go backwards until the previous directory separator. */
|
||||||
while (p > name && p[-1] != DIR_SEPARATOR
|
while (p > name && p[-1] != DIR_SEPARATOR
|
||||||
#ifdef DIR_SEPARATOR_2
|
#ifdef DIR_SEPARATOR_2
|
||||||
&& p[-1] != DIR_SEPARATOR_2
|
&& p[-1] != DIR_SEPARATOR_2
|
||||||
|
@ -1673,32 +1719,14 @@ fancy_abort (file, line, function)
|
||||||
int line;
|
int line;
|
||||||
const char *function;
|
const char *function;
|
||||||
{
|
{
|
||||||
error ("Internal compiler error in %s, at %s:%d",
|
fatal ("Internal compiler error in %s, at %s:%d",
|
||||||
function, trim_filename (file), line);
|
function, trim_filename (file), line);
|
||||||
finish_abort ();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Finish reporting an internal compiler error. If the only error we've
|
|
||||||
seen is the current one, encourage the user to file a bug report;
|
|
||||||
otherwise, fixing their code will probably avoid the crash. */
|
|
||||||
|
|
||||||
void
|
|
||||||
finish_abort ()
|
|
||||||
{
|
|
||||||
if (errorcount > 1 || sorrycount > 0)
|
|
||||||
fprintf (stderr, "confused by earlier errors, bailing out\n");
|
|
||||||
else
|
|
||||||
fprintf (stderr, "\
|
|
||||||
Please submit a full bug report.\n\
|
|
||||||
See %s for instructions.\n",
|
|
||||||
GCCBUGURL);
|
|
||||||
|
|
||||||
exit (FATAL_EXIT_CODE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Setup DC for reporting a diagnostic MESSAGE (an error or a WARNING),
|
/* Setup DC for reporting a diagnostic MESSAGE (an error or a WARNING),
|
||||||
using arguments pointed to by ARGS_PTR, issued at a location specified
|
using arguments pointed to by ARGS_PTR, issued at a location specified
|
||||||
by FILE and LINE. */
|
by FILE and LINE. */
|
||||||
|
|
||||||
void
|
void
|
||||||
set_diagnostic_context (dc, message, args_ptr, file, line, warn)
|
set_diagnostic_context (dc, message, args_ptr, file, line, warn)
|
||||||
diagnostic_context *dc;
|
diagnostic_context *dc;
|
||||||
|
|
|
@ -207,6 +207,5 @@ void record_last_error_module PARAMS ((void));
|
||||||
int error_function_changed PARAMS ((void));
|
int error_function_changed PARAMS ((void));
|
||||||
void record_last_error_function PARAMS ((void));
|
void record_last_error_function PARAMS ((void));
|
||||||
void report_problematic_module PARAMS ((output_buffer *));
|
void report_problematic_module PARAMS ((output_buffer *));
|
||||||
void finish_abort PARAMS ((void)) ATTRIBUTE_NORETURN;
|
|
||||||
|
|
||||||
#endif /* __GCC_DIAGNOSTIC_H__ */
|
#endif /* __GCC_DIAGNOSTIC_H__ */
|
||||||
|
|
|
@ -1698,8 +1698,7 @@ crash_signal (signo)
|
||||||
/* If this is missing, some compilers complain. */
|
/* If this is missing, some compilers complain. */
|
||||||
int signo;
|
int signo;
|
||||||
{
|
{
|
||||||
error ("Internal error: %s.", strsignal (signo));
|
fatal ("Internal error: %s.", strsignal (signo));
|
||||||
finish_abort ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Strip off a legitimate source ending from the input string NAME of
|
/* Strip off a legitimate source ending from the input string NAME of
|
||||||
|
|
Loading…
Add table
Reference in a new issue