This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Miscellaneous identifiers charset conversion cleanup


This patch makes identifiers handling in the language and target
independent parts of the compiler allow for extended identifiers and
translate them to the locale character set as appropriate (presuming
that UTF-8 is always OK for assembly output and debugging dumps).
Some representative tests are added, including verifying that
-ffunction-sections and -fdata-sections work with extended
identifiers.

I decided that when toplev.c announces functions to stderr this should
count as diagnostics rather than debugging dumps, and be converted to
the locale character set.

(Not all changes from %qs to %qE are in places where extended
identifiers can actually occur, but it still seems cleanest to reduce
the number of direct IDENTIFIER_POINTER calls and use the %E format
rather than %s for identifiers.)

Bootstrapped with no regressions on x86_64-unknown-linux-gnu.  OK to
commit?

2009-05-04  Joseph Myers  <joseph@codesourcery.com>

	* 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 "<anonymous>" 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:
2009-05-04  Joseph Myers  <joseph@codesourcery.com>

	* gcc.dg/ucnid-11.c, gcc.dg/ucnid-12.c, gcc.dg/ucnid-13.c: New
	tests.

Index: attribs.c
===================================================================
--- attribs.c	(revision 147096)
+++ attribs.c	(working copy)
@@ -280,16 +280,16 @@ decl_attributes (tree *node, tree attrib
 
       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 attrib
 	    }
 	  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 attrib
 	      && 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;
 	    }
 	}
Index: doc/invoke.texi
===================================================================
--- doc/invoke.texi	(revision 147096)
+++ doc/invoke.texi	(working copy)
@@ -16124,7 +16124,9 @@ instrumentation.  The function name to b
 name, such as @code{vector<int> blah(const vector<int> &)}, 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
Index: tree.c
===================================================================
--- tree.c	(revision 147096)
+++ tree.c	(working copy)
@@ -4063,8 +4063,8 @@ handle_dll_attribute (tree * pnode, tree
 	}
       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
       && 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
       && 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
 	  || 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
     {
       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;
     }
Index: toplev.c
===================================================================
--- toplev.c	(revision 147096)
+++ toplev.c	(working copy)
@@ -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 * p
       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 * p
   if (DECL_P (t))
     {
       const char *n = DECL_NAME (t)
-        ? lang_hooks.decl_printable_name (t, 2)
-        : "<anonymous>";
+        ? identifier_to_locale (lang_hooks.decl_printable_name (t, 2))
+        : _("<anonymous>");
       pp_string (pp, n);
     }
   else
Index: cgraphunit.c
===================================================================
--- cgraphunit.c	(revision 147096)
+++ cgraphunit.c	(working copy)
@@ -570,7 +570,8 @@ verify_cgraph_node (struct cgraph_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 *
 	  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;
 	    }
Index: testsuite/gcc.dg/ucnid-12.c
===================================================================
--- testsuite/gcc.dg/ucnid-12.c	(revision 0)
+++ testsuite/gcc.dg/ucnid-12.c	(revision 0)
@@ -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"
Index: testsuite/gcc.dg/ucnid-13.c
===================================================================
--- testsuite/gcc.dg/ucnid-13.c	(revision 0)
+++ testsuite/gcc.dg/ucnid-13.c	(revision 0)
@@ -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'" } */
Index: testsuite/gcc.dg/ucnid-11.c
===================================================================
--- testsuite/gcc.dg/ucnid-11.c	(revision 0)
+++ testsuite/gcc.dg/ucnid-11.c	(revision 0)
@@ -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"
Index: expr.c
===================================================================
--- expr.c	(revision 147096)
+++ expr.c	(working copy)
@@ -8055,14 +8055,14 @@ expand_expr_real_1 (tree exp, rtx target
 	    && (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.  */
Index: langhooks.c
===================================================================
--- langhooks.c	(revision 147096)
+++ langhooks.c	(working copy)
@@ -380,11 +380,11 @@ lhd_print_error_function (diagnostic_con
 	  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_con
 		      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, ':');
Index: langhooks.h
===================================================================
--- langhooks.h	(revision 147096)
+++ langhooks.h	(working copy)
@@ -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
Index: stor-layout.c
===================================================================
--- stor-layout.c	(revision 147096)
+++ stor-layout.c	(working copy)
@@ -1292,19 +1292,19 @@ finalize_record_size (record_layout_info
 
 	  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
 	    {
Index: gimplify.c
===================================================================
--- gimplify.c	(revision 147096)
+++ gimplify.c	(working copy)
@@ -5395,8 +5395,8 @@ omp_notice_variable (struct gimplify_omp
       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 
 	{
 	  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 
 		       && 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,
 	      && 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;
Index: coverage.c
===================================================================
--- coverage.c	(revision 147096)
+++ coverage.c	(working copy)
@@ -347,8 +347,8 @@ get_coverage_counts (unsigned counter, u
   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, u
       || 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)
Index: tree-mudflap.c
===================================================================
--- tree-mudflap.c	(revision 147096)
+++ tree-mudflap.c	(working copy)
@@ -1061,8 +1061,8 @@ mx_register_decls (tree decl, gimple_seq
 	    {
 	      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;
             }
           
Index: varasm.c
===================================================================
--- varasm.c	(revision 147096)
+++ varasm.c	(working copy)
@@ -4761,8 +4761,8 @@ output_constructor (tree exp, unsigned H
 	  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.  */
Index: stmt.c
===================================================================
--- stmt.c	(revision 147096)
+++ stmt.c	(working copy)
@@ -50,6 +50,7 @@ along with GCC; see the file COPYING3.  
 #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, 
 
   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 ou
     }
 
   *q = '\0';
-  error ("undefined named operand %qs", p + 1);
+  error ("undefined named operand %qs", identifier_to_locale (p + 1));
   op = 0;
  found:
 

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]