pretty-print.c: Include tree.h.

* pretty-print.c: Include tree.h.
	(pp_base_prepare_to_format): New function, logic from
	text_specifies_location.
	(pp_base_format_text): Use gcc_assert.
	* pretty-print.h (pp_prepare_to_format): New macro.
	(pp_base_prepare_to_format): Prototype.
	* diagnostic.c (text_specifies_location): Delete.
	(bug_report_request): Delete.
	(diagnostic_set_info): Don't call text_specifies_location.
	(diagnostic_action_after_output): Put text from
	bug_report_request inline here.  Use gcc_unreachable.
	(diagnostic_report_current_function): Fix comment.
	(diagnostic_report_diagnostic): Clarify logic for error recursion.
	Call pp_prepare_to_format before diagnostic_starter.
	(trim_filename): Use IS_DIR_SEPARATOR.
	(fatal_error, internal_error): Use gcc_unreachable.
	(error_recursion): Call diagnostic_action_after_output to
	issue the bug_report_request message and exit.
	* Makefile.in (diagnostic.o, pretty-print.o): Update dependencies.

	* c-parse.in: Add list of diagnostic messages to insulate
	translation template from version of yacc/bison used to
	compile the grammar.
java:
	* parse.y, parse-scan.y: Add list of diagnostic messages to
	insulate translation template from version of yacc/bison used
	to compile the grammar.
treelang:
	* parse.y: Add list of diagnostic messages to insulate
	translation template from version of yacc/bison used to
	compile the grammar.
po:
	* gcc.pot: Regenerate.

From-SVN: r88590
This commit is contained in:
Zack Weinberg 2004-10-06 04:47:42 +00:00 committed by Zack Weinberg
parent 12cde21b12
commit d5706a1eea
13 changed files with 3630 additions and 2832 deletions

View File

@ -1,3 +1,29 @@
2004-10-05 Zack Weinberg <zack@codesourcery.com>
* pretty-print.c: Include tree.h.
(pp_base_prepare_to_format): New function, logic from
text_specifies_location.
(pp_base_format_text): Use gcc_assert.
* pretty-print.h (pp_prepare_to_format): New macro.
(pp_base_prepare_to_format): Prototype.
* diagnostic.c (text_specifies_location): Delete.
(bug_report_request): Delete.
(diagnostic_set_info): Don't call text_specifies_location.
(diagnostic_action_after_output): Put text from
bug_report_request inline here. Use gcc_unreachable.
(diagnostic_report_current_function): Fix comment.
(diagnostic_report_diagnostic): Clarify logic for error recursion.
Call pp_prepare_to_format before diagnostic_starter.
(trim_filename): Use IS_DIR_SEPARATOR.
(fatal_error, internal_error): Use gcc_unreachable.
(error_recursion): Call diagnostic_action_after_output to
issue the bug_report_request message and exit.
* Makefile.in (diagnostic.o, pretty-print.o): Update dependencies.
* c-parse.in: Add list of diagnostic messages to insulate
translation template from version of yacc/bison used to
compile the grammar.
2004-10-06 Alan Modra <amodra@bigpond.net.au>
PR 16406

View File

@ -1787,9 +1787,9 @@ tree-pretty-print.o : tree-pretty-print.c $(CONFIG_H) $(SYSTEM_H) \
fold-const.o : fold-const.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(TREE_H) $(FLAGS_H) real.h toplev.h $(HASHTAB_H) $(EXPR_H) $(RTL_H) $(GGC_H) \
$(TM_P_H) langhooks.h $(MD5_H)
diagnostic.o : diagnostic.c $(DIAGNOSTIC_H) real.h \
$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) version.h $(TM_P_H) $(FLAGS_H) $(GGC_H) \
input.h toplev.h intl.h langhooks.h $(LANGHOOKS_DEF_H)
diagnostic.o : diagnostic.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(TREE_H) version.h $(TM_P_H) $(FLAGS_H) input.h toplev.h intl.h \
$(DIAGNOSTIC_H) langhooks.h $(LANGHOOKS_DEF_H)
opts.o : opts.c opts.h options.h toplev.h $(CONFIG_H) $(SYSTEM_H) \
coretypes.h $(TREE_H) $(TM_H) langhooks.h $(GGC_H) $(RTL_H) \
output.h $(DIAGNOSTIC_H) $(TM_P_H) $(INSN_ATTR_H) intl.h target.h
@ -2173,7 +2173,8 @@ lambda-code.o: lambda-code.c $(LAMBDA_H) $(GGC_H) $(SYSTEM_H) $(CONFIG_H) \
$(TREE_DATA_REF_H) $(SCEV_H)
params.o : params.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(PARAMS_H) toplev.h
hooks.o: hooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(HOOKS_H)
pretty-print.o: $(CONFIG_H) $(SYSTEM_H) pretty-print.c $(PRETTY_PRINT_H)
pretty-print.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h intl.h $(PRETTY_PRINT_H) \
$(TREE_H)
errors.o : errors.c $(CONFIG_H) $(SYSTEM_H) errors.h
$(out_object_file): $(out_file) $(CONFIG_H) coretypes.h $(TM_H) $(TREE_H) $(GGC_H) \
@ -2605,7 +2606,7 @@ build/gengtype$(build_exeext) : build/gengtype.o build/gengtype-lex.o \
$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
build/gengtype.o build/gengtype-lex.o build/gengtype-yacc.o \
$(BUILD_ERRORS) $(BUILD_LIBS)
build/gengtype.o : gengtype.c $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) \
gengtype.h gtyp-gen.h rtl.def insn-notes.def errors.h

View File

@ -52,7 +52,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "ggc.h"
#include "c-common.h"
/* Like YYERROR but do call yyerror. */
#define YYERROR1 { yyerror ("syntax error"); YYERROR; }
/* Like the default stack expander, except (1) use realloc when possible,
@ -3556,4 +3555,21 @@ c_parse_file (void)
}
}
#ifdef __XGETTEXT__
/* Depending on the version of Bison used to compile this grammar,
it may issue generic diagnostics spelled "syntax error" or
"parse error". To prevent this from changing the translation
template randomly, we list all the variants of this particular
diagnostic here. Translators: there is no fine distinction
between diagnostics with "syntax error" in them, and diagnostics
with "parse error" in them. It's okay to give them both the same
translation. */
const char d1[] = N_("syntax error");
const char d2[] = N_("parse error");
const char d3[] = N_("syntax error; also virtual memory exhausted");
const char d4[] = N_("parse error; also virtual memory exhausted");
const char d5[] = N_("syntax error: cannot back up");
const char d6[] = N_("parse error: cannot back up");
#endif
#include "gt-c-parse.h"

View File

@ -51,7 +51,6 @@ static void default_diagnostic_finalizer (diagnostic_context *,
diagnostic_info *);
static void error_recursion (diagnostic_context *) ATTRIBUTE_NORETURN;
static bool text_specifies_location (text_info *, location_t *);
static bool diagnostic_count_diagnostic (diagnostic_context *,
diagnostic_info *);
static void diagnostic_action_after_output (diagnostic_context *,
@ -61,13 +60,6 @@ static void real_abort (void) ATTRIBUTE_NORETURN;
/* A diagnostic_context surrogate for stderr. */
static diagnostic_context global_diagnostic_context;
diagnostic_context *global_dc = &global_diagnostic_context;
/* Boilerplate text used in two locations. */
#define bug_report_request \
"Please submit a full bug report,\n\
with preprocessed source if appropriate.\n\
See %s for instructions.\n"
/* Return a malloc'd string containing MSG formatted a la printf. The
caller is responsible for freeing the memory. */
@ -118,35 +110,6 @@ diagnostic_initialize (diagnostic_context *context)
context->lock = 0;
}
/* Returns true if the next format specifier in TEXT is a format specifier
for a location_t. If so, update the object pointed by LOCUS to reflect
the specified location in *TEXT->args_ptr. */
static bool
text_specifies_location (text_info *text, location_t *locus)
{
const char *p;
/* Skip any leading text. */
for (p = text->format_spec; *p && *p != '%'; ++p)
;
/* Extract the location information if any. */
if (p[0] == '%' && p[1] == 'H')
{
*locus = *va_arg (*text->args_ptr, location_t *);
text->format_spec = p + 2;
return true;
}
else if (p[0] == '%' && p[1] == 'J')
{
tree t = va_arg (*text->args_ptr, tree);
*locus = DECL_SOURCE_LOCATION (t);
text->format_spec = p + 2;
return true;
}
return false;
}
void
diagnostic_set_info (diagnostic_info *diagnostic, const char *msgid,
va_list *args, location_t location,
@ -155,10 +118,7 @@ diagnostic_set_info (diagnostic_info *diagnostic, const char *msgid,
diagnostic->message.err_no = errno;
diagnostic->message.args_ptr = args;
diagnostic->message.format_spec = _(msgid);
/* If the diagnostic message doesn't specify a location,
use LOCATION. */
if (!text_specifies_location (&diagnostic->message, &diagnostic->location))
diagnostic->location = location;
diagnostic->location = location;
diagnostic->kind = kind;
}
@ -274,7 +234,9 @@ diagnostic_action_after_output (diagnostic_context *context,
if (context->abort_on_error)
real_abort ();
fnotice (stderr, bug_report_request, bug_report_url);
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);
case DK_FATAL:
@ -285,14 +247,12 @@ diagnostic_action_after_output (diagnostic_context *context,
exit (FATAL_EXIT_CODE);
default:
real_abort ();
gcc_unreachable ();
}
}
/* Prints out, if necessary, the name of the current function
that caused an error. Called from all error and warning functions.
We ignore the FILE parameter, as it cannot be relied upon. */
that caused an error. Called from all error and warning functions. */
void
diagnostic_report_current_function (diagnostic_context *context)
{
@ -355,11 +315,23 @@ void
diagnostic_report_diagnostic (diagnostic_context *context,
diagnostic_info *diagnostic)
{
if (context->lock++ && diagnostic->kind < DK_SORRY)
error_recursion (context);
if (context->lock > 0)
{
/* If we're reporting an ICE in the middle of some other error,
try to flush out the previous error, then let this one
through. Don't do this more than once. */
if (diagnostic->kind == DK_ICE && context->lock == 1)
pp_flush (context->printer);
else
error_recursion (context);
}
context->lock++;
if (diagnostic_count_diagnostic (context, diagnostic))
{
pp_prepare_to_format (context->printer, &diagnostic->message,
&diagnostic->location);
(*diagnostic_starter (context)) (context, diagnostic);
pp_format_text (context->printer, &diagnostic->message);
(*diagnostic_finalizer (context)) (context, diagnostic);
@ -383,20 +355,10 @@ trim_filename (const char *name)
/* 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
))
while (p[0] == '.' && p[1] == '.' && IS_DIR_SEPARATOR (p[2]))
p += 3;
while (q[0] == '.' && q[1] == '.'
&& (q[2] == DIR_SEPARATOR
#ifdef DIR_SEPARATOR_2
|| p[2] == DIR_SEPARATOR_2
#endif
))
while (q[0] == '.' && q[1] == '.' && IS_DIR_SEPARATOR (q[2]))
q += 3;
/* Now skip any parts the two filenames have in common. */
@ -404,11 +366,7 @@ trim_filename (const char *name)
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
#endif
)
while (p > name && IS_DIR_SEPARATOR (p[-1]))
p--;
return p;
@ -526,8 +484,7 @@ fatal_error (const char *msgid, ...)
report_diagnostic (&diagnostic);
va_end (ap);
/* NOTREACHED */
real_abort ();
gcc_unreachable ();
}
/* An internal consistency check has failed. We make no attempt to
@ -545,8 +502,7 @@ internal_error (const char *msgid, ...)
report_diagnostic (&diagnostic);
va_end (ap);
/* NOTREACHED */
real_abort ();
gcc_unreachable ();
}
/* Special case error functions. Most are implemented in terms of the
@ -572,13 +528,22 @@ fnotice (FILE *file, const char *msgid, ...)
static void
error_recursion (diagnostic_context *context)
{
diagnostic_info diagnostic;
if (context->lock < 3)
pp_flush (context->printer);
fnotice (stderr,
"Internal compiler error: Error reporting routines re-entered.\n");
fnotice (stderr, bug_report_request, bug_report_url);
exit (FATAL_EXIT_CODE);
/* Call diagnostic_action_after_output to get the "please submit a bug
report" message. It only looks at the kind field of diagnostic_info. */
diagnostic.kind = DK_ICE;
diagnostic_action_after_output (context, &diagnostic);
/* Do not use gcc_unreachable here; that goes through internal_error
and therefore would cause infinite recursion. */
real_abort ();
}
/* Report an internal compiler error in a friendly manner. This is

View File

@ -1,3 +1,9 @@
2004-10-05 Zack Weinberg <zack@codesourcery.com>
* parse.y, parse-scan.y: Add list of diagnostic messages to
insulate translation template from version of yacc/bison used
to compile the grammar.
2004-10-05 Ranjit Mathew <rmathew@hotmail.com>
Prepare for %q, %< and %> in diagnostic message strings.
@ -230,7 +236,7 @@
Fix bootstrap.
* gjavah.c (free_method_name_list): Fix function definition so
it's a proper C prototype.
2004-09-21 Tom Tromey <tromey@redhat.com>
PR java/17575:

View File

@ -1360,3 +1360,20 @@ yyerror (const char *msg ATTRIBUTE_UNUSED)
fprintf (stderr, "%s: %d: %s\n", input_filename, input_line, msg);
exit (1);
}
#ifdef __XGETTEXT__
/* Depending on the version of Bison used to compile this grammar,
it may issue generic diagnostics spelled "syntax error" or
"parse error". To prevent this from changing the translation
template randomly, we list all the variants of this particular
diagnostic here. Translators: there is no fine distinction
between diagnostics with "syntax error" in them, and diagnostics
with "parse error" in them. It's okay to give them both the same
translation. */
const char d1[] = N_("syntax error");
const char d2[] = N_("parse error");
const char d3[] = N_("syntax error; also virtual memory exhausted");
const char d4[] = N_("parse error; also virtual memory exhausted");
const char d5[] = N_("syntax error: cannot back up");
const char d6[] = N_("parse error: cannot back up");
#endif

View File

@ -16409,5 +16409,22 @@ emit_test_initialization (void **entry_p, void *info)
return true;
}
#ifdef __XGETTEXT__
/* Depending on the version of Bison used to compile this grammar,
it may issue generic diagnostics spelled "syntax error" or
"parse error". To prevent this from changing the translation
template randomly, we list all the variants of this particular
diagnostic here. Translators: there is no fine distinction
between diagnostics with "syntax error" in them, and diagnostics
with "parse error" in them. It's okay to give them both the same
translation. */
const char d1[] = N_("syntax error");
const char d2[] = N_("parse error");
const char d3[] = N_("syntax error; also virtual memory exhausted");
const char d4[] = N_("parse error; also virtual memory exhausted");
const char d5[] = N_("syntax error: cannot back up");
const char d6[] = N_("parse error: cannot back up");
#endif
#include "gt-java-parse.h"
#include "gtype-java.h"

View File

@ -1,3 +1,7 @@
2004-10-05 Zack Weinberg <zack@codesourcery.com>
* gcc.pot: Regenerate.
2004-10-03 Joseph S. Myers <jsm@polyomino.org.uk>
* da.po: Update.

File diff suppressed because it is too large Load Diff

View File

@ -26,6 +26,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "coretypes.h"
#include "intl.h"
#include "pretty-print.h"
#include "tree.h"
#define obstack_chunk_alloc xmalloc
#define obstack_chunk_free free
@ -165,6 +166,40 @@ pp_base_indent (pretty_printer *pp)
pp_space (pp);
}
/* Prepare PP to format a message pointed to by TEXT, with tentative
location LOCUS. It is expected that a call to pp_format_text with
exactly the same PP and TEXT arguments will follow. This routine
may modify the data in memory at TEXT and LOCP, and if it does,
caller is expected to notice.
Currently, all this does is notice a %H or %J escape at the beginning
of the string, and update LOCUS to match. */
void
pp_base_prepare_to_format (pretty_printer *pp ATTRIBUTE_UNUSED,
text_info *text,
location_t *locus)
{
const char *p = text->format_spec;
tree t;
/* Extract the location information if any. */
if (p[0] == '%')
switch (p[1])
{
case 'H':
*locus = *va_arg (*text->args_ptr, location_t *);
text->format_spec = p + 2;
break;
case 'J':
t = va_arg (*text->args_ptr, tree);
*locus = DECL_SOURCE_LOCATION (t);
text->format_spec = p + 2;
break;
}
}
/* Format a message pointed to by TEXT. The following format specifiers are
recognized as being client independent:
%d, %i: (signed) integer in base ten.
@ -231,8 +266,7 @@ pp_base_format_text (pretty_printer *pp, text_info *text)
break;
}
/* We don't support precision beyond that of "long long". */
if (precision > 2)
abort();
gcc_assert (precision <= 2);
if (quoted)
pp_string (pp, open_quote);
@ -319,10 +353,11 @@ pp_base_format_text (pretty_printer *pp, text_info *text)
int n;
const char *s;
/* We handle no precision specifier but '%.*s'. */
if (*++text->format_spec != '*')
abort ();
else if (*++text->format_spec != 's')
abort ();
++text->format_spec;
gcc_assert (*text->format_spec == '*');
++text->format_spec;
gcc_assert (*text->format_spec == 's');
n = va_arg (*text->args_ptr, int);
s = va_arg (*text->args_ptr, const char *);
pp_append_text (pp, s, s + n);

View File

@ -158,6 +158,8 @@ struct pretty_print_info
#define pp_append_text(PP, B, E) \
pp_base_append_text (pp_base (PP), B, E)
#define pp_flush(PP) pp_base_flush (pp_base (PP))
#define pp_prepare_to_format(PP, TI, LOC) \
pp_base_prepare_to_format (pp_base (PP), TI, LOC)
#define pp_format_text(PP, TI) pp_base_format_text (pp_base (PP), TI)
#define pp_format_verbatim(PP, TI) \
pp_base_format_verbatim (pp_base (PP), TI)
@ -261,6 +263,8 @@ extern void pp_printf (pretty_printer *, const char *, ...)
extern void pp_verbatim (pretty_printer *, const char *, ...);
extern void pp_base_flush (pretty_printer *);
extern void pp_base_prepare_to_format (pretty_printer *, text_info *,
location_t *);
extern void pp_base_format_text (pretty_printer *, text_info *);
extern void pp_base_format_verbatim (pretty_printer *, text_info *);

View File

@ -1,3 +1,9 @@
2004-10-05 Zack Weinberg <zack@codesourcery.com>
* parse.y: Add list of diagnostic messages to insulate
translation template from version of yacc/bison used to
compile the grammar.
2004-10-02 James A. Morrison <phython@gcc.gnu.org>
PR other/17762

View File

@ -954,3 +954,19 @@ treelang_debug (void)
yydebug = 1;
}
#ifdef __XGETTEXT__
/* Depending on the version of Bison used to compile this grammar,
it may issue generic diagnostics spelled "syntax error" or
"parse error". To prevent this from changing the translation
template randomly, we list all the variants of this particular
diagnostic here. Translators: there is no fine distinction
between diagnostics with "syntax error" in them, and diagnostics
with "parse error" in them. It's okay to give them both the same
translation. */
const char d1[] = N_("syntax error");
const char d2[] = N_("parse error");
const char d3[] = N_("syntax error; also virtual memory exhausted");
const char d4[] = N_("parse error; also virtual memory exhausted");
const char d5[] = N_("syntax error: cannot back up");
const char d6[] = N_("parse error: cannot back up");
#endif