From 4f1e4960a6f174ae3ece9a1582aa802708a1d2fc Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Tue, 5 May 2009 00:44:36 +0100 Subject: [PATCH] attribs.c (decl_attributes): Use %qE for identifiers in diagnostics. * attribs.c (decl_attributes): Use %qE for identifiers in diagnostics. * cgraphunit.c (verify_cgraph_node): Translate function names to locale character set in diagnostics. * coverage.c (get_coverage_counts): Use %qE for identifiers in diagnostics. * doc/invoke.texi (-finstrument-functions-exclude-function-list): Document that functions are named in UTF-8. * expr.c (expand_expr_real_1): Translate function names to locale character set in diagnostics. * gimplify.c (omp_notice_variable, omp_is_private, gimplify_scan_omp_clauses): Use %qE for identifiers in diagnostics. * langhooks.c (lhd_print_error_function): Translate function names to locale character set. * langhooks.h (decl_printable_name): Document that return value is in internal character set. * stmt.c: Include pretty-print.h (tree_conflicts_with_clobbers_p): Use %qE for identifiers in diagnostics. (resolve_operand_name_1): Translate named operand name to locale character set. * stor-layout.c (finalize_record_size): Use %qE for identifiers in diagnostics. * toplev.c (announce_function): Translate function names to locale character set. (warn_deprecated_use): Use %qE for identifiers in diagnostics. (default_tree_printer): Use pp_identifier or translate identifiers to locale character set. Mark "" for translation. * tree-mudflap.c (mx_register_decls, mudflap_finish_file): Use %qE for identifiers in diagnostics. * tree.c (handle_dll_attribute): Use %qE for identifiers in diagnostics. * varasm.c (output_constructor): Use %qE for identifiers in diagnostics. testsuite: * gcc.dg/ucnid-11.c, gcc.dg/ucnid-12.c, gcc.dg/ucnid-13.c: New tests. From-SVN: r147111 --- gcc/ChangeLog | 38 ++++++++++++++++++++++++++++++++++++++ gcc/attribs.c | 16 ++++++++-------- gcc/cgraphunit.c | 7 ++++--- gcc/coverage.c | 11 +++++------ gcc/doc/invoke.texi | 4 +++- gcc/expr.c | 4 ++-- gcc/gimplify.c | 20 ++++++++++---------- gcc/langhooks.c | 10 +++++----- gcc/langhooks.h | 7 +++++-- gcc/stmt.c | 7 ++++--- gcc/stor-layout.c | 10 +++++----- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/ucnid-11.c | 5 +++++ gcc/testsuite/gcc.dg/ucnid-12.c | 5 +++++ gcc/testsuite/gcc.dg/ucnid-13.c | 13 +++++++++++++ gcc/toplev.c | 22 ++++++++++++---------- gcc/tree-mudflap.c | 8 ++++---- gcc/tree.c | 18 +++++++++--------- gcc/varasm.c | 4 ++-- 19 files changed, 144 insertions(+), 70 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/ucnid-11.c create mode 100644 gcc/testsuite/gcc.dg/ucnid-12.c create mode 100644 gcc/testsuite/gcc.dg/ucnid-13.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9ae3ce6..1e5803d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,41 @@ +2009-05-04 Joseph Myers + + * attribs.c (decl_attributes): Use %qE for identifiers in + diagnostics. + * cgraphunit.c (verify_cgraph_node): Translate function names to + locale character set in diagnostics. + * coverage.c (get_coverage_counts): Use %qE for identifiers in + diagnostics. + * doc/invoke.texi (-finstrument-functions-exclude-function-list): + Document that functions are named in UTF-8. + * expr.c (expand_expr_real_1): Translate function names to locale + character set in diagnostics. + * gimplify.c (omp_notice_variable, omp_is_private, + gimplify_scan_omp_clauses): Use %qE for identifiers in + diagnostics. + * langhooks.c (lhd_print_error_function): Translate function names + to locale character set. + * langhooks.h (decl_printable_name): Document that return value is + in internal character set. + * stmt.c: Include pretty-print.h + (tree_conflicts_with_clobbers_p): Use %qE for identifiers in + diagnostics. + (resolve_operand_name_1): Translate named operand name to locale + character set. + * stor-layout.c (finalize_record_size): Use %qE for identifiers in + diagnostics. + * toplev.c (announce_function): Translate function names to locale + character set. + (warn_deprecated_use): Use %qE for identifiers in diagnostics. + (default_tree_printer): Use pp_identifier or translate identifiers + to locale character set. Mark "" for translation. + * tree-mudflap.c (mx_register_decls, mudflap_finish_file): Use %qE + for identifiers in diagnostics. + * tree.c (handle_dll_attribute): Use %qE for identifiers in + diagnostics. + * varasm.c (output_constructor): Use %qE for identifiers in + diagnostics. + 2009-05-04 Rafael Avila de Espindola * configure.ac: use ` ` instead of $() diff --git a/gcc/attribs.c b/gcc/attribs.c index a020f46..df4ca73 100644 --- a/gcc/attribs.c +++ b/gcc/attribs.c @@ -280,16 +280,16 @@ decl_attributes (tree *node, tree attributes, int flags) if (spec == NULL) { - warning (OPT_Wattributes, "%qs attribute directive ignored", - IDENTIFIER_POINTER (name)); + warning (OPT_Wattributes, "%qE attribute directive ignored", + name); continue; } else if (list_length (args) < spec->min_length || (spec->max_length >= 0 && list_length (args) > spec->max_length)) { - error ("wrong number of arguments specified for %qs attribute", - IDENTIFIER_POINTER (name)); + error ("wrong number of arguments specified for %qE attribute", + name); continue; } gcc_assert (is_attribute_p (spec->name, name)); @@ -306,8 +306,8 @@ decl_attributes (tree *node, tree attributes, int flags) } else { - warning (OPT_Wattributes, "%qs attribute does not apply to types", - IDENTIFIER_POINTER (name)); + warning (OPT_Wattributes, "%qE attribute does not apply to types", + name); continue; } } @@ -357,8 +357,8 @@ decl_attributes (tree *node, tree attributes, int flags) && TREE_CODE (*anode) != METHOD_TYPE) { warning (OPT_Wattributes, - "%qs attribute only applies to function types", - IDENTIFIER_POINTER (name)); + "%qE attribute only applies to function types", + name); continue; } } diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index 7b87d38..9b7ca8c 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -570,7 +570,8 @@ verify_cgraph_node (struct cgraph_node *node) if (e->aux) { error ("aux field set for edge %s->%s", - cgraph_node_name (e->caller), cgraph_node_name (e->callee)); + identifier_to_locale (cgraph_node_name (e->caller)), + identifier_to_locale (cgraph_node_name (e->callee))); error_found = true; } if (node->count < 0) @@ -696,8 +697,8 @@ verify_cgraph_node (struct cgraph_node *node) if (!e->aux && !e->indirect_call) { error ("edge %s->%s has no corresponding call_stmt", - cgraph_node_name (e->caller), - cgraph_node_name (e->callee)); + identifier_to_locale (cgraph_node_name (e->caller)), + identifier_to_locale (cgraph_node_name (e->callee))); debug_gimple_stmt (e->call_stmt); error_found = true; } diff --git a/gcc/coverage.c b/gcc/coverage.c index 8eb30ac..9240241 100644 --- a/gcc/coverage.c +++ b/gcc/coverage.c @@ -347,8 +347,8 @@ get_coverage_counts (unsigned counter, unsigned expected, entry = (counts_entry_t *) htab_find (counts_hash, &elt); if (!entry) { - warning (0, "no coverage for function %qs found", IDENTIFIER_POINTER - (DECL_ASSEMBLER_NAME (current_function_decl))); + warning (0, "no coverage for function %qE found", + DECL_ASSEMBLER_NAME (current_function_decl)); return NULL; } @@ -357,14 +357,13 @@ get_coverage_counts (unsigned counter, unsigned expected, || entry->summary.num != expected) { static int warned = 0; - const char *id = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME - (current_function_decl)); + tree id = DECL_ASSEMBLER_NAME (current_function_decl); if (warn_coverage_mismatch) warning (OPT_Wcoverage_mismatch, "coverage mismatch for function " - "%qs while reading counter %qs", id, ctr_names[counter]); + "%qE while reading counter %qs", id, ctr_names[counter]); else - error ("coverage mismatch for function %qs while reading counter %qs", + error ("coverage mismatch for function %qE while reading counter %qs", id, ctr_names[counter]); if (!inhibit_warnings) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 59409d6..0021e80 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -16124,7 +16124,9 @@ instrumentation. The function name to be matched is its user-visible name, such as @code{vector blah(const vector &)}, not the internal mangled name (e.g., @code{_Z4blahRSt6vectorIiSaIiEE}). The match is done on substrings: if the @var{sym} parameter is a substring -of the function name, it is considered to be a match. +of the function name, it is considered to be a match. For C99 and C++ +extended identifiers, the function name must be given in UTF-8, not +using universal character names. @item -fstack-check @opindex fstack-check diff --git a/gcc/expr.c b/gcc/expr.c index c3e4d81..3c800dd 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -8055,14 +8055,14 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, && (attr = lookup_attribute ("error", DECL_ATTRIBUTES (fndecl))) != NULL) error ("%Kcall to %qs declared with attribute error: %s", - exp, lang_hooks.decl_printable_name (fndecl, 1), + exp, identifier_to_locale (lang_hooks.decl_printable_name (fndecl, 1)), TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr)))); if (fndecl && (attr = lookup_attribute ("warning", DECL_ATTRIBUTES (fndecl))) != NULL) warning_at (tree_nonartificial_location (exp), 0, "%Kcall to %qs declared with attribute warning: %s", - exp, lang_hooks.decl_printable_name (fndecl, 1), + exp, identifier_to_locale (lang_hooks.decl_printable_name (fndecl, 1)), TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr)))); /* Check for a built-in function. */ diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 24481d1..0909d31 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -5395,8 +5395,8 @@ omp_notice_variable (struct gimplify_omp_ctx *ctx, tree decl, bool in_code) switch (default_kind) { case OMP_CLAUSE_DEFAULT_NONE: - error ("%qs not specified in enclosing parallel", - IDENTIFIER_POINTER (DECL_NAME (decl))); + error ("%qE not specified in enclosing parallel", + DECL_NAME (decl)); error ("%Henclosing parallel", &ctx->location); /* FALLTHRU */ case OMP_CLAUSE_DEFAULT_SHARED: @@ -5502,8 +5502,8 @@ omp_is_private (struct gimplify_omp_ctx *ctx, tree decl) { if (ctx == gimplify_omp_ctxp) { - error ("iteration variable %qs should be private", - IDENTIFIER_POINTER (DECL_NAME (decl))); + error ("iteration variable %qE should be private", + DECL_NAME (decl)); n->value = GOVD_PRIVATE; return true; } @@ -5516,11 +5516,11 @@ omp_is_private (struct gimplify_omp_ctx *ctx, tree decl) && gimplify_omp_ctxp->outer_context == ctx))) { if ((n->value & GOVD_FIRSTPRIVATE) != 0) - error ("iteration variable %qs should not be firstprivate", - IDENTIFIER_POINTER (DECL_NAME (decl))); + error ("iteration variable %qE should not be firstprivate", + DECL_NAME (decl)); else if ((n->value & GOVD_REDUCTION) != 0) - error ("iteration variable %qs should not be reduction", - IDENTIFIER_POINTER (DECL_NAME (decl))); + error ("iteration variable %qE should not be reduction", + DECL_NAME (decl)); } return (ctx == gimplify_omp_ctxp || (ctx->region_type == ORT_COMBINED_PARALLEL @@ -5682,8 +5682,8 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p, && region_type == ORT_WORKSHARE && omp_check_private (ctx, decl)) { - error ("%s variable %qs is private in outer context", - check_non_private, IDENTIFIER_POINTER (DECL_NAME (decl))); + error ("%s variable %qE is private in outer context", + check_non_private, DECL_NAME (decl)); remove = true; } break; diff --git a/gcc/langhooks.c b/gcc/langhooks.c index fa9b8dd..8579062 100644 --- a/gcc/langhooks.c +++ b/gcc/langhooks.c @@ -380,11 +380,11 @@ lhd_print_error_function (diagnostic_context *context, const char *file, if (TREE_CODE (TREE_TYPE (fndecl)) == METHOD_TYPE) pp_printf (context->printer, _("In member function %qs"), - lang_hooks.decl_printable_name (fndecl, 2)); + identifier_to_locale (lang_hooks.decl_printable_name (fndecl, 2))); else pp_printf (context->printer, _("In function %qs"), - lang_hooks.decl_printable_name (fndecl, 2)); + identifier_to_locale (lang_hooks.decl_printable_name (fndecl, 2))); while (abstract_origin) { @@ -435,18 +435,18 @@ lhd_print_error_function (diagnostic_context *context, const char *file, if (flag_show_column && s.column != 0) pp_printf (context->printer, _(" inlined from %qs at %s:%d:%d"), - lang_hooks.decl_printable_name (fndecl, 2), + identifier_to_locale (lang_hooks.decl_printable_name (fndecl, 2)), s.file, s.line, s.column); else pp_printf (context->printer, _(" inlined from %qs at %s:%d"), - lang_hooks.decl_printable_name (fndecl, 2), + identifier_to_locale (lang_hooks.decl_printable_name (fndecl, 2)), s.file, s.line); } else pp_printf (context->printer, _(" inlined from %qs"), - lang_hooks.decl_printable_name (fndecl, 2)); + identifier_to_locale (lang_hooks.decl_printable_name (fndecl, 2))); } } pp_character (context->printer, ':'); diff --git a/gcc/langhooks.h b/gcc/langhooks.h index 6c57ca2..0694189 100644 --- a/gcc/langhooks.h +++ b/gcc/langhooks.h @@ -1,5 +1,5 @@ /* The lang_hooks data structure. - Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GCC. @@ -332,7 +332,10 @@ struct lang_hooks information will be printed: 0: DECL_NAME, demangled as necessary. 1: and scope information. 2: and any other information that might be interesting, such as function parameter - types in C++. */ + types in C++. The name is in the internal character set and + needs to be converted to the locale character set of diagnostics, + or to the execution character set for strings such as + __PRETTY_FUNCTION__. */ const char *(*decl_printable_name) (tree decl, int verbosity); /* Computes the dwarf-2/3 name for a tree. VERBOSITY determines what diff --git a/gcc/stmt.c b/gcc/stmt.c index 6dc32fd..7fc4038 100644 --- a/gcc/stmt.c +++ b/gcc/stmt.c @@ -50,6 +50,7 @@ along with GCC; see the file COPYING3. If not see #include "target.h" #include "regs.h" #include "alloc-pool.h" +#include "pretty-print.h" /* Functions and data structures for expanding case statements. */ @@ -600,8 +601,8 @@ tree_conflicts_with_clobbers_p (tree t, HARD_REG_SET *clobbered_regs) if (overlap) { - error ("asm-specifier for variable %qs conflicts with asm clobber list", - IDENTIFIER_POINTER (DECL_NAME (overlap))); + error ("asm-specifier for variable %qE conflicts with asm clobber list", + DECL_NAME (overlap)); /* Reset registerness to stop multiple errors emitted for a single variable. */ @@ -1322,7 +1323,7 @@ resolve_operand_name_1 (char *p, tree outputs, tree inputs) } *q = '\0'; - error ("undefined named operand %qs", p + 1); + error ("undefined named operand %qs", identifier_to_locale (p + 1)); op = 0; found: diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index c2d367f..fab5817 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -1292,19 +1292,19 @@ finalize_record_size (record_layout_info rli) if (TYPE_NAME (rli->t)) { - const char *name; + tree name; if (TREE_CODE (TYPE_NAME (rli->t)) == IDENTIFIER_NODE) - name = IDENTIFIER_POINTER (TYPE_NAME (rli->t)); + name = TYPE_NAME (rli->t); else - name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (rli->t))); + name = DECL_NAME (TYPE_NAME (rli->t)); if (STRICT_ALIGNMENT) warning (OPT_Wpacked, "packed attribute causes inefficient " - "alignment for %qs", name); + "alignment for %qE", name); else warning (OPT_Wpacked, - "packed attribute is unnecessary for %qs", name); + "packed attribute is unnecessary for %qE", name); } else { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2da28f3..6c8d1d2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2009-05-04 Joseph Myers + * gcc.dg/ucnid-11.c, gcc.dg/ucnid-12.c, gcc.dg/ucnid-13.c: New + tests. + +2009-05-04 Joseph Myers + * gcc.dg/ucnid-8.c, gcc.dg/ucnid-9.c, gcc.dg/ucnid-10.c: New tests. * gcc.dg/declspec-9.c, gcc.dg/declspec-10.c, gcc.dg/declspec-11.c: diff --git a/gcc/testsuite/gcc.dg/ucnid-11.c b/gcc/testsuite/gcc.dg/ucnid-11.c new file mode 100644 index 0000000..b406330 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ucnid-11.c @@ -0,0 +1,5 @@ +/* { dg-do run } */ +/* { dg-xfail-if "" { powerpc-ibm-aix* *-*-solaris2.* } { "*" } { "" } } */ +/* { dg-options "-std=c99 -fextended-identifiers -fdata-sections" } */ + +#include "ucnid-3.c" diff --git a/gcc/testsuite/gcc.dg/ucnid-12.c b/gcc/testsuite/gcc.dg/ucnid-12.c new file mode 100644 index 0000000..6c87892 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ucnid-12.c @@ -0,0 +1,5 @@ +/* { dg-do run } */ +/* { dg-xfail-if "" { powerpc-ibm-aix* *-*-solaris2.* } { "*" } { "" } } */ +/* { dg-options "-std=c99 -fextended-identifiers -ffunction-sections" } */ + +#include "ucnid-4.c" diff --git a/gcc/testsuite/gcc.dg/ucnid-13.c b/gcc/testsuite/gcc.dg/ucnid-13.c new file mode 100644 index 0000000..8ec69fa --- /dev/null +++ b/gcc/testsuite/gcc.dg/ucnid-13.c @@ -0,0 +1,13 @@ +/* Verify diagnostics for extended identifiers refer to UCNs (in the C + locale). Miscellaneous diagnostics. */ +/* { dg-do compile } */ +/* { dg-options "-std=gnu99 -fextended-identifiers -Wpacked" } */ + +int a __attribute__((\u00c0)); /* { dg-warning "'\\\\U000000c0' attribute directive ignored" } */ + +extern void \u00c1 (void) __attribute__((deprecated)); +void g (void) { \u00c1 (); } /* { dg-warning "'\\\\U000000c1' is deprecated" } */ + +struct \u00c2 { char c; } __attribute__((packed)); /* { dg-warning "'\\\\U000000c2'" } */ + +void h (void) { asm ("%[\u00c3]" : : ); } /* { dg-error "undefined named operand '\\\\U000000c3'" } */ diff --git a/gcc/toplev.c b/gcc/toplev.c index 9520299..1b850fa 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -427,9 +427,11 @@ announce_function (tree decl) if (!quiet_flag) { if (rtl_dump_and_exit) - fprintf (stderr, "%s ", IDENTIFIER_POINTER (DECL_NAME (decl))); + fprintf (stderr, "%s ", + identifier_to_locale (IDENTIFIER_POINTER (DECL_NAME (decl)))); else - fprintf (stderr, " %s", lang_hooks.decl_printable_name (decl, 2)); + fprintf (stderr, " %s", + identifier_to_locale (lang_hooks.decl_printable_name (decl, 2))); fflush (stderr); pp_needs_newline (global_dc->printer) = true; diagnostic_set_last_function (global_dc, (diagnostic_info *) NULL); @@ -920,16 +922,16 @@ warn_deprecated_use (tree node) } else if (TYPE_P (node)) { - const char *what = NULL; + tree what = NULL_TREE; tree decl = TYPE_STUB_DECL (node); if (TYPE_NAME (node)) { if (TREE_CODE (TYPE_NAME (node)) == IDENTIFIER_NODE) - what = IDENTIFIER_POINTER (TYPE_NAME (node)); + what = TYPE_NAME (node); else if (TREE_CODE (TYPE_NAME (node)) == TYPE_DECL && DECL_NAME (TYPE_NAME (node))) - what = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (node))); + what = DECL_NAME (TYPE_NAME (node)); } if (decl) @@ -938,7 +940,7 @@ warn_deprecated_use (tree node) = expand_location (DECL_SOURCE_LOCATION (decl)); if (what) warning (OPT_Wdeprecated_declarations, - "%qs is deprecated (declared at %s:%d)", what, + "%qE is deprecated (declared at %s:%d)", what, xloc.file, xloc.line); else warning (OPT_Wdeprecated_declarations, @@ -948,7 +950,7 @@ warn_deprecated_use (tree node) else { if (what) - warning (OPT_Wdeprecated_declarations, "%qs is deprecated", what); + warning (OPT_Wdeprecated_declarations, "%qE is deprecated", what); else warning (OPT_Wdeprecated_declarations, "type is deprecated"); } @@ -1511,7 +1513,7 @@ default_tree_printer (pretty_printer * pp, text_info *text, const char *spec, t = va_arg (*text->args_ptr, tree); if (TREE_CODE (t) == IDENTIFIER_NODE) { - pp_string (pp, IDENTIFIER_POINTER (t)); + pp_identifier (pp, IDENTIFIER_POINTER (t)); return true; } break; @@ -1537,8 +1539,8 @@ default_tree_printer (pretty_printer * pp, text_info *text, const char *spec, if (DECL_P (t)) { const char *n = DECL_NAME (t) - ? lang_hooks.decl_printable_name (t, 2) - : ""; + ? identifier_to_locale (lang_hooks.decl_printable_name (t, 2)) + : _(""); pp_string (pp, n); } else diff --git a/gcc/tree-mudflap.c b/gcc/tree-mudflap.c index e2116e5..0c07b97 100644 --- a/gcc/tree-mudflap.c +++ b/gcc/tree-mudflap.c @@ -1061,8 +1061,8 @@ mx_register_decls (tree decl, gimple_seq seq, location_t location) { if (!DECL_ARTIFICIAL (decl)) warning (OPT_Wmudflap, - "mudflap cannot track %qs in stub function", - IDENTIFIER_POINTER (DECL_NAME (decl))); + "mudflap cannot track %qE in stub function", + DECL_NAME (decl)); } else { @@ -1305,8 +1305,8 @@ mudflap_finish_file (void) if (! COMPLETE_TYPE_P (TREE_TYPE (obj))) { warning (OPT_Wmudflap, - "mudflap cannot track unknown size extern %qs", - IDENTIFIER_POINTER (DECL_NAME (obj))); + "mudflap cannot track unknown size extern %qE", + DECL_NAME (obj)); continue; } diff --git a/gcc/tree.c b/gcc/tree.c index 57e1d32..295358c 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -4063,8 +4063,8 @@ handle_dll_attribute (tree * pnode, tree name, tree args, int flags, } else { - warning (OPT_Wattributes, "%qs attribute ignored", - IDENTIFIER_POINTER (name)); + warning (OPT_Wattributes, "%qE attribute ignored", + name); *no_add_attrs = true; return NULL_TREE; } @@ -4075,8 +4075,8 @@ handle_dll_attribute (tree * pnode, tree name, tree args, int flags, && TREE_CODE (node) != TYPE_DECL) { *no_add_attrs = true; - warning (OPT_Wattributes, "%qs attribute ignored", - IDENTIFIER_POINTER (name)); + warning (OPT_Wattributes, "%qE attribute ignored", + name); return NULL_TREE; } @@ -4085,8 +4085,8 @@ handle_dll_attribute (tree * pnode, tree name, tree args, int flags, && TREE_CODE (TREE_TYPE (node)) != UNION_TYPE) { *no_add_attrs = true; - warning (OPT_Wattributes, "%qs attribute ignored", - IDENTIFIER_POINTER (name)); + warning (OPT_Wattributes, "%qE attribute ignored", + name); return NULL_TREE; } @@ -4141,7 +4141,7 @@ handle_dll_attribute (tree * pnode, tree name, tree args, int flags, || TREE_CODE (node) == FUNCTION_DECL)) { error ("external linkage required for symbol %q+D because of " - "%qs attribute", node, IDENTIFIER_POINTER (name)); + "%qE attribute", node, name); *no_add_attrs = true; } @@ -4154,9 +4154,9 @@ handle_dll_attribute (tree * pnode, tree name, tree args, int flags, { if (DECL_VISIBILITY_SPECIFIED (node) && DECL_VISIBILITY (node) != VISIBILITY_DEFAULT) - error ("%qs implies default visibility, but %qD has already " + error ("%qE implies default visibility, but %qD has already " "been declared with a different visibility", - IDENTIFIER_POINTER (name), node); + name, node); DECL_VISIBILITY (node) = VISIBILITY_DEFAULT; DECL_VISIBILITY_SPECIFIED (node) = 1; } diff --git a/gcc/varasm.c b/gcc/varasm.c index 0a7b480..c85cf9d 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -4761,8 +4761,8 @@ output_constructor (tree exp, unsigned HOST_WIDE_INT size, total_bytes += fieldsize; } else if (val != 0 && TREE_CODE (val) != INTEGER_CST) - error ("invalid initial value for member %qs", - IDENTIFIER_POINTER (DECL_NAME (field))); + error ("invalid initial value for member %qE", + DECL_NAME (field)); else { /* Element that is a bit-field. */ -- 2.7.4