re PR ada/23717 ([Ada] Wrong ICE diagnostic formatting)

2005-11-19  Richard Guenther  <rguenther@suse.de>
	Roger Sayle  <roger@eyesopen.com>

        PR ada/23717
	* misc.c (internal_error_function): Don't use vsprintf to format
	the error message text, instead use pp_format_text and the new
	pretty printer APIs.  This allows handling of %qs, %w, etc.

Co-Authored-By: Roger Sayle <roger@eyesopen.com>

From-SVN: r107223
This commit is contained in:
Richard Guenther 2005-11-19 17:24:33 +00:00 committed by Richard Biener
parent 756191b7c5
commit 452b5b1e53
2 changed files with 25 additions and 4 deletions

View File

@ -1,3 +1,11 @@
2005-11-19 Richard Guenther <rguenther@suse.de>
Roger Sayle <roger@eyesopen.com>
PR ada/23717
* misc.c (internal_error_function): Don't use vsprintf to format
the error message text, instead use pp_format_text and the new
pretty printer APIs. This allows handling of %qs, %w, etc.
2005-11-18 Laurent GUERBY <laurent@guerby.net>
PR ada/24857

View File

@ -364,12 +364,23 @@ gnat_post_options (const char **pfilename ATTRIBUTE_UNUSED)
static void
internal_error_function (const char *msgid, va_list *ap)
{
char buffer[1000]; /* Assume this is big enough. */
text_info tinfo;
char *buffer;
char *p;
String_Template temp;
Fat_Pointer fp;
vsprintf (buffer, msgid, *ap);
/* Reset the pretty-printer. */
pp_clear_output_area (global_dc->printer);
/* Format the message into the pretty-printer. */
tinfo.format_spec = msgid;
tinfo.args_ptr = ap;
tinfo.err_no = errno;
pp_format_verbatim (global_dc->printer, &tinfo);
/* Extract a (writable) pointer to the formatted text. */
buffer = (char*) pp_formatted_text (global_dc->printer);
/* Go up to the first newline. */
for (p = buffer; *p; p++)
@ -379,8 +390,10 @@ internal_error_function (const char *msgid, va_list *ap)
break;
}
temp.Low_Bound = 1, temp.High_Bound = strlen (buffer);
fp.Array = buffer, fp.Bounds = &temp;
temp.Low_Bound = 1;
temp.High_Bound = p - buffer;
fp.Bounds = &temp;
fp.Array = buffer;
Current_Error_Node = error_gnat_node;
Compiler_Abort (fp, -1);