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
|
||||
file involved in a diagnostic message. */
|
||||
|
||||
int
|
||||
error_module_changed ()
|
||||
{
|
||||
|
@ -164,6 +165,7 @@ error_module_changed ()
|
|||
|
||||
/* Remember current file as being the most recent file involved in a
|
||||
diagnostic message. */
|
||||
|
||||
void
|
||||
record_last_error_module ()
|
||||
{
|
||||
|
@ -171,6 +173,7 @@ record_last_error_module ()
|
|||
}
|
||||
|
||||
/* Same as error_module_changed, but for function. */
|
||||
|
||||
int
|
||||
error_function_changed ()
|
||||
{
|
||||
|
@ -178,6 +181,7 @@ error_function_changed ()
|
|||
}
|
||||
|
||||
/* Same as record_last_error_module, but for function. */
|
||||
|
||||
void
|
||||
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
|
||||
length cutoff. */
|
||||
|
||||
void
|
||||
default_initialize_buffer (buffer)
|
||||
output_buffer *buffer;
|
||||
|
@ -365,6 +370,7 @@ reshape_diagnostic_buffer ()
|
|||
}
|
||||
|
||||
/* Reinitialize BUFFER. */
|
||||
|
||||
void
|
||||
output_clear (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. */
|
||||
|
||||
static void
|
||||
maybe_wrap_text (buffer, start, end)
|
||||
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
|
||||
responsible for freeing the memory. */
|
||||
|
||||
char *
|
||||
context_as_prefix (file, line, warn)
|
||||
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. */
|
||||
|
||||
char *
|
||||
file_name_as_prefix (f)
|
||||
const char *f;
|
||||
|
@ -1409,6 +1418,12 @@ fatal VPARAMS ((const char *msgid, ...))
|
|||
msgid = va_arg (ap, const char *);
|
||||
#endif
|
||||
|
||||
if (errorcount > 1 || sorrycount > 0)
|
||||
{
|
||||
fprintf (stderr, "confused by earlier errors, bailing out\n");
|
||||
exit (FATAL_EXIT_CODE);
|
||||
}
|
||||
|
||||
if (fatal_function != 0)
|
||||
(*fatal_function) (_(msgid), &ap);
|
||||
|
||||
|
@ -1416,6 +1431,10 @@ fatal VPARAMS ((const char *msgid, ...))
|
|||
(&dc, msgid, &ap, input_filename, lineno, /* warn = */0);
|
||||
report_diagnostic (&dc);
|
||||
va_end (ap);
|
||||
|
||||
fprintf
|
||||
(stderr, "Please submit a full bug report.\n See %s for instructions.\n",
|
||||
GCCBUGURL);
|
||||
exit (FATAL_EXIT_CODE);
|
||||
}
|
||||
|
||||
|
@ -1533,6 +1552,7 @@ warning VPARAMS ((const char *msgid, ...))
|
|||
}
|
||||
|
||||
/* Flush diagnostic_buffer content on stderr. */
|
||||
|
||||
static void
|
||||
finish_diagnostic ()
|
||||
{
|
||||
|
@ -1544,6 +1564,7 @@ finish_diagnostic ()
|
|||
|
||||
/* Helper subroutine of output_verbatim and verbatim. Do the approriate
|
||||
settings needed by BUFFER for a verbatim formatting. */
|
||||
|
||||
static void
|
||||
output_do_verbatim (buffer, msg, args_ptr)
|
||||
output_buffer *buffer;
|
||||
|
@ -1563,6 +1584,7 @@ output_do_verbatim (buffer, msg, args_ptr)
|
|||
}
|
||||
|
||||
/* Output MESSAGE verbatim into BUFFER. */
|
||||
|
||||
void
|
||||
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. */
|
||||
|
||||
void
|
||||
verbatim VPARAMS ((const char *msg, ...))
|
||||
{
|
||||
|
@ -1604,6 +1627,7 @@ verbatim VPARAMS ((const char *msg, ...))
|
|||
should implement their specific diagnostic handling modules. The
|
||||
front-end independent format specifiers are exactly those described
|
||||
in the documentation of output_format. */
|
||||
|
||||
void
|
||||
report_diagnostic (dc)
|
||||
diagnostic_context *dc;
|
||||
|
@ -1631,21 +1655,21 @@ report_diagnostic (dc)
|
|||
/* Inform the user that an error occurred while trying to report some
|
||||
other error. This indicates catastrophic internal inconsistencies,
|
||||
so give up now. But do try to flush out the previous error. */
|
||||
|
||||
static void
|
||||
error_recursion ()
|
||||
{
|
||||
if (diagnostic_lock < 3)
|
||||
finish_diagnostic ();
|
||||
|
||||
fputs (_("Internal compiler error: Error reporting routines re-entered.\n"),
|
||||
stderr);
|
||||
finish_abort ();
|
||||
fatal ("Internal compiler error: Error reporting routines re-entered.");
|
||||
}
|
||||
|
||||
/* Given a partial pathname as input, return another pathname that
|
||||
shares no directory elements with the pathname of __FILE__. This
|
||||
is used by fancy_abort() to print `Internal compiler error in expr.c'
|
||||
instead of `Internal compiler error in ../../GCC/gcc/expr.c'. */
|
||||
|
||||
static const char *
|
||||
trim_filename (name)
|
||||
const char *name;
|
||||
|
@ -1653,7 +1677,29 @@ trim_filename (name)
|
|||
static const char this_file[] = __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
|
||||
#ifdef DIR_SEPARATOR_2
|
||||
&& p[-1] != DIR_SEPARATOR_2
|
||||
|
@ -1673,32 +1719,14 @@ fancy_abort (file, line, function)
|
|||
int line;
|
||||
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);
|
||||
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),
|
||||
using arguments pointed to by ARGS_PTR, issued at a location specified
|
||||
by FILE and LINE. */
|
||||
|
||||
void
|
||||
set_diagnostic_context (dc, message, args_ptr, file, line, warn)
|
||||
diagnostic_context *dc;
|
||||
|
|
|
@ -207,6 +207,5 @@ void record_last_error_module PARAMS ((void));
|
|||
int error_function_changed PARAMS ((void));
|
||||
void record_last_error_function PARAMS ((void));
|
||||
void report_problematic_module PARAMS ((output_buffer *));
|
||||
void finish_abort PARAMS ((void)) ATTRIBUTE_NORETURN;
|
||||
|
||||
#endif /* __GCC_DIAGNOSTIC_H__ */
|
||||
|
|
|
@ -1698,8 +1698,7 @@ crash_signal (signo)
|
|||
/* If this is missing, some compilers complain. */
|
||||
int signo;
|
||||
{
|
||||
error ("Internal error: %s.", strsignal (signo));
|
||||
finish_abort ();
|
||||
fatal ("Internal error: %s.", strsignal (signo));
|
||||
}
|
||||
|
||||
/* Strip off a legitimate source ending from the input string NAME of
|
||||
|
|
Loading…
Add table
Reference in a new issue