resolve the overloading.  */
          if (TREE_TYPE (converted_operand) == unknown_type_node)
            {
-             error ("type of asm operand `%E' could not be determined", 
-                       TREE_VALUE (t));
+             error ("type of asm operand %qE could not be determined", 
+                     TREE_VALUE (t));
              converted_operand = error_mark_node;
            }
          TREE_VALUE (t) = converted_operand;
     {
       if (current_function_decl 
          && DECL_STATIC_FUNCTION_P (current_function_decl))
-       cp_error_at ("invalid use of member `%D' in static member function",
+       cp_error_at ("invalid use of member %qD in static member function",
                     decl);
       else
-       cp_error_at ("invalid use of non-static data member `%D'", decl);
+       cp_error_at ("invalid use of non-static data member %qD", decl);
       error ("from this location");
 
       return error_mark_node;
 
          if (!access_type)
            {
-             cp_error_at ("object missing in reference to `%D'", decl);
+             cp_error_at ("object missing in reference to %qD", decl);
              error ("from this location");
              return error_mark_node;
            }
       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (object), 
                                                      destructor))
        {
-         error ("`%E' is not of type `%T'", object, destructor);
+         error ("%qE is not of type %qT", object, destructor);
          return error_mark_node;
        }
     }
             that the user is using a template instantiation.  */
          if (CLASSTYPE_TEMPLATE_INFO (t) 
              && CLASSTYPE_TEMPLATE_INSTANTIATION (t))
-           error ("invalid use of type `%T' as a default value for a "
+           error ("invalid use of type %qT as a default value for a "
                   "template template-parameter", t);
          else
-           error ("invalid use of `%D' as a default value for a template "
+           error ("invalid use of %qD as a default value for a template "
                   "template-parameter", argument);
        }
       else
 
   if (processing_template_parmlist)
     {
-      error ("definition of `%#T' inside template parameter list", t);
+      error ("definition of %q#T inside template parameter list", t);
       return error_mark_node;
     }
   /* A non-implicit typename comes from code like:
      This is erroneous.  */
   else if (TREE_CODE (t) == TYPENAME_TYPE)
     {
-      error ("invalid definition of qualified type `%T'", t);
+      error ("invalid definition of qualified type %qT", t);
       t = error_mark_node;
     }
 
      that's an error.  */
   if (COMPLETE_TYPE_P (t))
     {
-      error ("redefinition of `%#T'", t);
-      cp_error_at ("previous definition of `%#T'", t);
+      error ("redefinition of %q#T", t);
+      cp_error_at ("previous definition of %q#T", t);
       return error_mark_node;
     }
 
     {
       if (cp_type_quals (base) != 0)
         {
-          error ("base class `%T' has cv qualifiers", base);
+          error ("base class %qT has cv qualifiers", base);
           base = TYPE_MAIN_VARIANT (base);
         }
       result = build_tree_list (access, base);
   if (TYPE_P (scope))
     {
       if (!COMPLETE_TYPE_P (scope))
-       error ("incomplete type `%T' used in nested name specifier", scope);
+       error ("incomplete type %qT used in nested name specifier", scope);
       else if (TREE_CODE (decl) == TREE_LIST)
        {
-         error ("reference to `%T::%D' is ambiguous", scope, name);
+         error ("reference to %<%T::%D%> is ambiguous", scope, name);
          print_candidates (decl);
        }
       else
-       error ("`%D' is not a member of `%T'", name, scope);
+       error ("%qD is not a member of %qT", name, scope);
     }
   else if (scope != global_namespace)
-    error ("`%D' is not a member of `%D'", name, scope);
+    error ("%qD is not a member of %qD", name, scope);
   else
-    error ("`::%D' has not been declared", name);
+    error ("%<::%D%> has not been declared", name);
 }
              
 /* ID_EXPRESSION is a representation of parsed, but unprocessed,
          && !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (decl))) 
        {
          if (!allow_non_integral_constant_expression_p)
-           error ("template parameter `%D' of type `%T' is not allowed in "
+           error ("template parameter %qD of type %qT is not allowed in "
                   "an integral constant expression because it is not of "
                   "integral or enumeration type", decl, TREE_TYPE (decl));
          *non_integral_constant_expression_p = true;
        {
          if (!allow_non_integral_constant_expression_p)
            {
-             error ("`%D' cannot appear in a constant-expression", decl);
+             error ("%qD cannot appear in a constant-expression", decl);
              return error_mark_node;
            }
          *non_integral_constant_expression_p = true;
       
       if (TREE_CODE (decl) == NAMESPACE_DECL)
        {
-         error ("use of namespace `%D' as expression", decl);
+         error ("use of namespace %qD as expression", decl);
          return error_mark_node;
        }
       else if (DECL_CLASS_TEMPLATE_P (decl))
        {
-         error ("use of class template `%T' as expression", decl);
+         error ("use of class template %qT as expression", decl);
          return error_mark_node;
        }
       else if (TREE_CODE (decl) == TREE_LIST)
        {
          /* Ambiguous reference to base members.  */
-         error ("request for member `%D' is ambiguous in "
+         error ("request for member %qD is ambiguous in "
                 "multiple inheritance lattice", id_expression);
          print_candidates (decl);
          return error_mark_node;
                {
                  error ("use of %s from containing function",
                         (TREE_CODE (decl) == VAR_DECL
-                         ? "`auto' variable" : "parameter"));
-                 cp_error_at ("  `%#D' declared here", decl);
+                         ? "%<auto%> variable" : "parameter"));
+                 cp_error_at ("  %q#D declared here", decl);
                  return error_mark_node;
                }
            }
 
   if (!type || type == unknown_type_node)
     {
-      error ("type of `%E' is unknown", expr);
+      error ("type of %qE is unknown", expr);
       return error_mark_node;
     }
 
 
     result_type = composite_pointer_type_r (pointee1, pointee2, location);
   else
     {
-      pedwarn ("%s between distinct pointer types `%T' and `%T' "
+      pedwarn ("%s between distinct pointer types %qT and %qT "
               "lacks a cast",
               location, t1, t2);
       result_type = void_type_node;
     {
       if (!same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1),
                        TYPE_PTRMEM_CLASS_TYPE (t2)))
-       pedwarn ("%s between distinct pointer types `%T' and `%T' "
+       pedwarn ("%s between distinct pointer types %qT and %qT "
                 "lacks a cast",
                 location, t1, t2);
       result_type = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1),
       tree result_type;
 
       if (pedantic && TYPE_PTRFN_P (t2))
-       pedwarn ("ISO C++ forbids %s between pointer of type `void *' and pointer-to-function", location);
+       pedwarn ("ISO C++ forbids %s between pointer of type %<void *%> "
+                 "and pointer-to-function", location);
       result_type 
        = cp_build_qualified_type (void_type_node,
                                   (cp_type_quals (TREE_TYPE (t1))
              (cp_build_qualified_type (class2, TYPE_QUALS (class1))));
       else
        {
-         error ("%s between distinct pointer types `%T' and `%T' "
+         error ("%s between distinct pointer types %qT and %qT "
                 "lacks a cast", location, t1, t2);
          return error_mark_node;
        }
        t2 = build_ptrmem_type (class1, TYPE_PTRMEM_POINTED_TO_TYPE (t2));
       else
        {
-         error ("%s between distinct pointer-to-member types `%T' and `%T' "
+         error ("%s between distinct pointer-to-member types %qT and %qT "
                 "lacks a cast", location, t1, t2);
          return error_mark_node;
        }
   if (type_code == METHOD_TYPE)
     {
       if (complain && (pedantic || warn_pointer_arith))
-       pedwarn ("invalid application of `%s' to a member function", op_name);
+       pedwarn ("invalid application of %qs to a member function", op_name);
       value = size_one_node;
     }
   else
       && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL
       && DECL_C_BIT_FIELD (TREE_OPERAND (e, 1)))
     {
-      error ("invalid application of `%s' to a bit-field", op_name);
+      error ("invalid application of %qs to a bit-field", op_name);
       e = char_type_node;
     }
   else if (is_overloaded_fn (e))
     {
-      pedwarn ("ISO C++ forbids applying `%s' to an expression of function type", op_name);
+      pedwarn ("ISO C++ forbids applying %qs to an expression of "
+               "function type", op_name);
       e = char_type_node;
     }
   else if (type_unknown_p (e))
 
   /* This warning is not very useful, as it complains about printf.  */
   if (warn && warn_write_strings)
-    warning ("deprecated conversion from string constant to `%T'", totype);
+    warning ("deprecated conversion from string constant to %qT'", totype);
 
   return 1;
 }
     return error_mark_node;
   if (!CLASS_TYPE_P (object_type))
     {
-      error ("request for member `%D' in `%E', which is of non-class type `%T'", 
+      error ("request for member %qD in %qE, which is of non-class type %qT", 
             member, object, object_type);
       return error_mark_node;
     }
   if (!member_scope || !DERIVED_FROM_P (member_scope, object_type))
     {
       if (TREE_CODE (member) == FIELD_DECL)
-        error ("invalid use of nonstatic data member '%E'", member);
+        error ("invalid use of nonstatic data member %qE", member);
       else
-        error ("`%D' is not a member of `%T'", member, object_type);
+        error ("%qD is not a member of %qT", member, object_type);
       return error_mark_node;
     }
 
             offsetof macro.  */
          if (null_object_p && kind == bk_via_virtual)
            {
-             error ("invalid access to non-static data member `%D' of NULL object",
+             error ("invalid access to non-static data member %qD of "
+                     "NULL object",
                     member);
-             error ("(perhaps the `offsetof' macro was used incorrectly)");
+             error ("(perhaps the %<offsetof%> macro was used incorrectly)");
              return error_mark_node;
            }
 
          && !DECL_FIELD_IS_BASE (member)
          && !skip_evaluation)
        {
-         warning ("invalid access to non-static data member `%D' of NULL object", 
+         warning ("invalid access to non-static data member %qD of NULL object", 
                   member);
-         warning  ("(perhaps the `offsetof' macro was used incorrectly)");
+         warning  ("(perhaps the %<offsetof%> macro was used incorrectly)");
        }
 
       /* If MEMBER is from an anonymous aggregate, we have converted
     }
   else
     {
-      error ("invalid use of `%D'", member);
+      error ("invalid use of %qD", member);
       return error_mark_node;
     }
 
 
   if (scope && !check_dtor_name (scope, dtor_name))
     {
-      error ("qualified type `%T' does not match destructor name `~%T'",
+      error ("qualified type %qT does not match destructor name ~%qT",
             scope, dtor_type);
       return error_mark_node;
     }
   if (!DERIVED_FROM_P (dtor_type, TYPE_MAIN_VARIANT (object_type)))
     {
-      error ("the type being destroyed is `%T', but the destructor refers to `%T'",
+      error ("the type being destroyed is %qT, but the destructor refers to %qT",
             TYPE_MAIN_VARIANT (object_type), dtor_type);
       return error_mark_node;
     }
     return error_mark_node;
   if (!CLASS_TYPE_P (object_type))
     {
-      error ("request for member `%D' in `%E', which is of non-class type `%T'", 
+      error ("request for member %qD in %qE, which is of non-class type %qT", 
             name, object, object_type);
       return error_mark_node;
     }
             name a member of OBJECT_TYPE.  */
          if (TREE_CODE (scope) == NAMESPACE_DECL)
            {
-             error ("`%D::%D' is not a member of `%T'", 
+             error ("%<%D::%D%> is not a member of %qT", 
                     scope, name, object_type);
              return error_mark_node;
            }
            return error_mark_node;
          if (!access_path)
            {
-             error ("`%T' is not a base of `%T'", scope, object_type);
+             error ("%qT is not a base of %qT", scope, object_type);
              return error_mark_node;
            }
        }
                                  /*want_type=*/false);
          if (member == NULL_TREE)
            {
-             error ("'%D' has no member named '%E'", object_type, name);
+             error ("%qD has no member named %qE", object_type, name);
              return error_mark_node;
            }
          if (member == error_mark_node)
            template = lookup_template_function (template, template_args);
          else
            {
-             error ("`%D' is not a member template function", name);
+             error ("%qD is not a member template function", name);
              return error_mark_node;
            }
        }
         {
           /* A pointer to incomplete type (other than cv void) can be
              dereferenced [expr.unary.op]/1  */
-          error ("`%T' is not a pointer-to-object type", type);
+          error ("%qT is not a pointer-to-object type", type);
           return error_mark_node;
         }
       else if (TREE_CODE (pointer) == ADDR_EXPR
   /* `pointer' won't be an error_mark_node if we were given a
      pointer to member, so it's cool to check for this here.  */
   else if (TYPE_PTR_TO_MEMBER_P (type))
-    error ("invalid use of `%s' on pointer to member", errorstring);
+    error ("invalid use of %qs on pointer to member", errorstring);
   else if (pointer != error_mark_node)
     {
       if (errorstring)
-       error ("invalid type argument of `%s'", errorstring);
+       error ("invalid type argument of %qs", errorstring);
       else
        error ("invalid type argument");
     }
         must have done so deliberately.  */
       if (warn_char_subscripts
          && TYPE_MAIN_VARIANT (TREE_TYPE (idx)) == char_type_node)
-       warning ("array subscript has type `char'");
+       warning ("array subscript has type %<char%>");
 
       if (!INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (idx)))
        {
          while (TREE_CODE (foo) == COMPONENT_REF)
            foo = TREE_OPERAND (foo, 0);
          if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo))
-           warning ("subscripting array declared `register'");
+           warning ("subscripting array declared %<register%>");
        }
 
       type = TREE_TYPE (TREE_TYPE (array));
            }
          else
            {
-             error ("object missing in use of `%E'", function);
+             error ("object missing in use of %qE", function);
              return error_mark_node;
            }
        }
 
       /* Convert anything with function type to a pointer-to-function.  */
       if (pedantic && DECL_MAIN_P (function))
-       pedwarn ("ISO C++ forbids calling `::main' from within program");
+       pedwarn ("ISO C++ forbids calling %<::main%> from within program");
 
       /* Differs from default_conversion by not setting TREE_ADDRESSABLE
         (because calling an inline function does not mean the function
 
   if (TYPE_PTRMEMFUNC_P (fntype))
     {
-      error ("must use .* or ->* to call pointer-to-member function in `%E (...)'",
-               original);
+      error ("must use %<.*%> or %<->*%> to call pointer-to-member "
+             "function in %<%E (...)%>",
+             original);
       return error_mark_node;
     }
 
        || is_method
        || TREE_CODE (function) == TEMPLATE_ID_EXPR))
     {
-      error ("`%E' cannot be used as a function", original);
+      error ("%qE cannot be used as a function", original);
       return error_mark_node;
     }
 
        {
          if (fndecl)
            {
-             cp_error_at ("too many arguments to %s `%+#D'", called_thing,
+             cp_error_at ("too many arguments to %s %q+#D", called_thing,
                           fndecl);
              error ("at this point in file");
            }
          if (!COMPLETE_TYPE_P (complete_type (type)))
            {
              if (fndecl)
-               error ("parameter %P of `%D' has incomplete type `%T'",
+               error ("parameter %P of %qD has incomplete type %qT",
                       i, fndecl, type);
              else
-               error ("parameter %P has incomplete type `%T'", i, type);
+               error ("parameter %P has incomplete type %qT", i, type);
              parmval = error_mark_node;
            }
          else
        {
          if (fndecl)
            {
-             cp_error_at ("too few arguments to %s `%+#D'",
+             cp_error_at ("too few arguments to %s %q+#D",
                           called_thing, fndecl);
              error ("at this point in file");
            }
       tree t = instantiate_type (TREE_TYPE (op1), op0, tf_none);
       if (t != error_mark_node)
        {
-         pedwarn ("assuming cast to type `%T' from overloaded function",
-                     TREE_TYPE (t));
+         pedwarn ("assuming cast to type %qT from overloaded function",
+                   TREE_TYPE (t));
          op0 = t;
        }
     }
       tree t = instantiate_type (TREE_TYPE (op0), op1, tf_none);
       if (t != error_mark_node)
        {
-         pedwarn ("assuming cast to type `%T' from overloaded function",
-                     TREE_TYPE (t));
+         pedwarn ("assuming cast to type %qT from overloaded function",
+                   TREE_TYPE (t));
          op1 = t;
        }
     }
              || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE))
        {
          if (TREE_CODE (op1) == INTEGER_CST && integer_zerop (op1))
-           warning ("division by zero in `%E / 0'", op0);
+           warning ("division by zero in %<%E / 0%>", op0);
          else if (TREE_CODE (op1) == REAL_CST && real_zerop (op1))
-           warning ("division by zero in `%E / 0.'", op0);
+           warning ("division by zero in %<%E / 0.%>", op0);
              
          if (code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE)
            code0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0)));
     case TRUNC_MOD_EXPR:
     case FLOOR_MOD_EXPR:
       if (code1 == INTEGER_TYPE && integer_zerop (op1))
-       warning ("division by zero in `%E %% 0'", op0);
+       warning ("division by zero in %<%E %% 0%>", op0);
       else if (code1 == REAL_TYPE && real_zerop (op1))
-       warning ("division by zero in `%E %% 0.'", op0);
+       warning ("division by zero in %<%E %% 0.%>", op0);
       
       if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
        {
 
   if (!result_type)
     {
-      error ("invalid operands of types `%T' and `%T' to binary `%O'",
+      error ("invalid operands of types %qT and %qT to binary %qO",
             TREE_TYPE (orig_op0), TREE_TYPE (orig_op1), code);
       return error_mark_node;
     }
              && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0))
                 != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1)))
            {
-             warning ("comparison between types `%#T' and `%#T'", 
-                         TREE_TYPE (orig_op0), TREE_TYPE (orig_op1));
+             warning ("comparison between types %q#T and %q#T", 
+                       TREE_TYPE (orig_op0), TREE_TYPE (orig_op1));
            }
 
          /* Give warnings for comparisons between signed and unsigned
   if (pedantic || warn_pointer_arith)
     {
       if (TREE_CODE (target_type) == VOID_TYPE)
-       pedwarn ("ISO C++ forbids using pointer of type `void *' in subtraction");
+       pedwarn ("ISO C++ forbids using pointer of type %<void *%> in subtraction");
       if (TREE_CODE (target_type) == FUNCTION_TYPE)
        pedwarn ("ISO C++ forbids using pointer to a function in subtraction");
       if (TREE_CODE (target_type) == METHOD_TYPE)
            tree type = complete_type (TREE_TYPE (argtype));
            
            if (!COMPLETE_OR_VOID_TYPE_P (type))
-             error ("cannot %s a pointer to incomplete type `%T'",
-                       ((code == PREINCREMENT_EXPR
-                         || code == POSTINCREMENT_EXPR)
-                        ? "increment" : "decrement"), TREE_TYPE (argtype));
+             error ("cannot %s a pointer to incomplete type %qT",
+                     ((code == PREINCREMENT_EXPR
+                       || code == POSTINCREMENT_EXPR)
+                      ? "increment" : "decrement"), TREE_TYPE (argtype));
            else if ((pedantic || warn_pointer_arith)
                     && !TYPE_PTROB_P (argtype))
-             pedwarn ("ISO C++ forbids %sing a pointer of type `%T'",
-                         ((code == PREINCREMENT_EXPR
-                           || code == POSTINCREMENT_EXPR)
-                          ? "increment" : "decrement"), argtype);
+             pedwarn ("ISO C++ forbids %sing a pointer of type %qT",
+                       ((code == PREINCREMENT_EXPR
+                         || code == POSTINCREMENT_EXPR)
+                        ? "increment" : "decrement"), argtype);
            inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
          }
        else
          {
            if (code == POSTDECREMENT_EXPR || code == PREDECREMENT_EXPR)
              {
-               error ("invalid use of `--' on bool variable `%D'", arg);
+               error ("invalid use of %<--%> on bool variable %qD", arg);
                return error_mark_node;
              }
            val = boolean_increment (code, arg);
        }
       else if (pedantic && DECL_MAIN_P (arg))
        /* ARM $3.4 */
-       pedwarn ("ISO C++ forbids taking address of function `::main'");
+       pedwarn ("ISO C++ forbids taking address of function %<::main%>");
 
       /* Let &* cancel out to simplify resulting code.  */
       if (TREE_CODE (arg) == INDIRECT_REF)
                /* An expression like &memfn.  */
                pedwarn ("ISO C++ forbids taking the address of an unqualified"
                         " or parenthesized non-static member function to form"
-                        " a pointer to member function.  Say `&%T::%D'",
+                        " a pointer to member function.  Say %<&%T::%D%>",
                         base, name);
              else
                pedwarn ("ISO C++ forbids taking the address of a bound member"
                         " function to form a pointer to member function."
-                        "  Say `&%T::%D'",
+                        "  Say %<&%T::%D%>",
                         base, name);
            }
          arg = build_offset_ref (base, name, /*address_p=*/true);
         is an error.  */
       else if (TREE_CODE (argtype) != FUNCTION_TYPE
               && TREE_CODE (argtype) != METHOD_TYPE
-              && !lvalue_or_else (arg, "unary `&'"))
+              && !lvalue_or_else (arg, "unary %<&$>"))
        return error_mark_node;
 
       if (argtype != error_mark_node)
          }
        else if (DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
          {
-           error ("attempt to take address of bit-field structure member `%D'",
+           error ("attempt to take address of bit-field structure member %qD",
                   TREE_OPERAND (arg, 1));
            return error_mark_node;
          }
          
          if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
            {
-             error ("cannot create pointer to reference member `%D'", t);
+             error ("cannot create pointer to reference member %qD", t);
              return error_mark_node;
            }
 
       case RESULT_DECL:
        if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
            && !DECL_ARTIFICIAL (x) && extra_warnings)
-         warning ("address requested for `%D', which is declared `register'",
-                     x);
+         warning ("address requested for %qD, which is declared `register'",
+                   x);
        TREE_ADDRESSABLE (x) = 1;
        return true;
 
                                  const char *description)
 {
   if (casts_away_constness (src_type, dest_type))
-    error ("%s from type `%T' to type `%T' casts away constness",
+    error ("%s from type %qT to type %qT casts away constness",
           description, src_type, dest_type);
 }
 
       return build_nop (type, expr);
     }
 
-  error ("invalid static_cast from type `%T' to type `%T'", intype, type);
+  error ("invalid static_cast from type %qT to type %qT", intype, type);
   return error_mark_node;
 }
 
     {
       if (! real_lvalue_p (expr))
        {
-         error ("invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'", intype, type);
+         error ("invalid reinterpret_cast of an rvalue expression of type "
+                 "%qT to type %qT", intype, type);
          return error_mark_node;
        }
       expr = build_unary_op (ADDR_EXPR, expr, 0);
   else if (TREE_CODE (type) == INTEGER_TYPE && TYPE_PTR_P (intype))
     {
       if (TYPE_PRECISION (type) < TYPE_PRECISION (intype))
-       pedwarn ("reinterpret_cast from `%T' to `%T' loses precision",
-                   intype, type);
+       pedwarn ("reinterpret_cast from %qT to %qT loses precision",
+                 intype, type);
     }
   else if ((TYPE_PTRFN_P (type) && TYPE_PTRFN_P (intype))
           || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
     }
   else
     {
-      error ("invalid reinterpret_cast from type `%T' to type `%T'",
-                intype, type);
+      error ("invalid reinterpret_cast from type %qT to type %qT",
+             intype, type);
       return error_mark_node;
     }
       
     }
 
   if (!POINTER_TYPE_P (type) && !TYPE_PTRMEM_P (type))
-    error ("invalid use of const_cast with type `%T', which is not a pointer, reference, nor a pointer-to-data-member type", type);
+    error ("invalid use of const_cast with type %qT, which is not a pointer, "
+           "reference, nor a pointer-to-data-member type", type);
   else if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
     {
-      error ("invalid use of const_cast with type `%T', which is a pointer or reference to a function type", type);
+      error ("invalid use of const_cast with type %qT, which is a pointer "
+             "or reference to a function type", type);
       return error_mark_node;
     }
 
     {
       if (! real_lvalue_p (expr))
        {
-         error ("invalid const_cast of an rvalue of type `%T' to type `%T'", intype, type);
+         error ("invalid const_cast of an rvalue of type %qT to type %qT",
+                 intype, type);
          return error_mark_node;
        }
 
           && comp_ptr_ttypes_const (TREE_TYPE (type), TREE_TYPE (intype)))
     return cp_convert (type, expr);
 
-  error ("invalid const_cast from type `%T' to type `%T'", intype, type);
+  error ("invalid const_cast from type %qT to type %qT", intype, type);
   return error_mark_node;
 }
 
         NIHCL uses it. It is not valid ISO C++ however.  */
       if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE)
        {
-         pedwarn ("ISO C++ forbids casting to an array type `%T'", type);
+         pedwarn ("ISO C++ forbids casting to an array type %qT", type);
          type = build_pointer_type (TREE_TYPE (type));
        }
       else
        {
-         error ("ISO C++ forbids casting to an array type `%T'", type);
+         error ("ISO C++ forbids casting to an array type %qT", type);
          return error_mark_node;
        }
     }
   if (TREE_CODE (type) == FUNCTION_TYPE
       || TREE_CODE (type) == METHOD_TYPE)
     {
-      error ("invalid cast to function type `%T'", type);
+      error ("invalid cast to function type %qT", type);
       return error_mark_node;
     }
 
       && TREE_CODE (otype) == POINTER_TYPE
       && !at_least_as_qualified_p (TREE_TYPE (type),
                                   TREE_TYPE (otype)))
-    warning ("cast from `%T' to `%T' discards qualifiers from pointer target type",
-                otype, type);
+    warning ("cast from %qT to %qT discards qualifiers from pointer "
+             "target type",
+             otype, type);
 
   if (TREE_CODE (type) == INTEGER_TYPE
       && TYPE_PTR_P (otype)
       && COMPLETE_TYPE_P (TREE_TYPE (otype))
       && COMPLETE_TYPE_P (TREE_TYPE (type))
       && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (otype)))
-    warning ("cast from `%T' to `%T' increases required alignment of target type",
-                otype, type);
+    warning ("cast from %qT to %qT increases required alignment of "
+             "target type",
+             otype, type);
 
     /* Always produce some operator for an explicit cast,
        so we can tell (for -pedantic) that the cast is no lvalue.  */
          newrhs = cp_build_binary_op (modifycode, lhs, rhs);
          if (newrhs == error_mark_node)
            {
-             error ("  in evaluation of `%Q(%#T, %#T)'", modifycode,
+             error ("  in evaluation of %<%Q(%#T, %#T)%>", modifycode,
                     TREE_TYPE (lhs), TREE_TYPE (rhs));
              return error_mark_node;
            }
       if (!same_or_base_type_p (TYPE_MAIN_VARIANT (lhstype),
                                TYPE_MAIN_VARIANT (TREE_TYPE (rhs))))
        {
-         error ("incompatible types in assignment of `%T' to `%T'",
+         error ("incompatible types in assignment of %qT to %qT",
                 TREE_TYPE (rhs), lhstype);
          return error_mark_node;
        }
        {
          /* This is a reinterpret cast, we choose to do nothing.  */
          if (force)
-           warning ("pointer to member cast via virtual base `%T'",
+           warning ("pointer to member cast via virtual base %qT",
                     BINFO_TYPE (virt_binfo));
          else
-           error ("pointer to member conversion via virtual base `%T'",
+           error ("pointer to member conversion via virtual base %qT",
                   BINFO_TYPE (virt_binfo));
        }
     }
 
       if (!force 
          && !can_convert_arg (to_type, TREE_TYPE (pfn), pfn))
-       error ("invalid conversion to type `%T' from type `%T'", 
-                 to_type, pfn_type);
+       error ("invalid conversion to type %qT from type %qT", 
+               to_type, pfn_type);
 
       n = get_delta_difference (TYPE_PTRMEMFUNC_OBJECT_TYPE (pfn_type),
                                TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type),
   if (ARITHMETIC_TYPE_P (type) && expr == null_node)
     {
       if (fndecl)
-        warning ("passing NULL used for non-pointer %s %P of `%D'",
-                    errtype, parmnum, fndecl);
+        warning ("passing NULL used for non-pointer %s %P of %qD",
+                 errtype, parmnum, fndecl);
       else
-        warning ("%s to non-pointer type `%T' from NULL", errtype, type);
+        warning ("%s to non-pointer type %qT from NULL", errtype, type);
     }
   
   /* Warn about assigning a floating-point type to an integer type.  */
       && TREE_CODE (type) == INTEGER_TYPE)
     {
       if (fndecl)
-       warning ("passing `%T' for %s %P of `%D'",
-                   TREE_TYPE (expr), errtype, parmnum, fndecl);
+       warning ("passing %qT for %s %P of %qD",
+                 TREE_TYPE (expr), errtype, parmnum, fndecl);
       else
-       warning ("%s to `%T' from `%T'", errtype, type, TREE_TYPE (expr));
+       warning ("%s to %qT from %qT", errtype, type, TREE_TYPE (expr));
     }
   /* And warn about assigning a negative value to an unsigned
      variable.  */
       if (TREE_CODE (expr) == INTEGER_CST && TREE_NEGATED_INT (expr))
        {
          if (fndecl)
-           warning ("passing negative value `%E' for %s %P of `%D'",
-                       expr, errtype, parmnum, fndecl);
+           warning ("passing negative value %qE for %s %P of %qD",
+                     expr, errtype, parmnum, fndecl);
          else
-           warning ("%s of negative value `%E' to `%T'",
-                       errtype, expr, type);
+           warning ("%s of negative value %qE to %qT", errtype, expr, type);
        }
 
       overflow_warning (expr);
          if (rhstype == unknown_type_node)
            instantiate_type (type, rhs, tf_error | tf_warning);
          else if (fndecl)
-           error ("cannot convert `%T' to `%T' for argument `%P' to `%D'",
-                     rhstype, type, parmnum, fndecl);
+           error ("cannot convert %qT to %qT for argument %qP to %qD",
+                   rhstype, type, parmnum, fndecl);
          else
-           error ("cannot convert `%T' to `%T' in %s", rhstype, type, 
-                     errtype);
+           error ("cannot convert %qT to %qT in %s", rhstype, type, errtype);
          return error_mark_node;
        }
     }
       if (fndecl)
        {
          if (warningcount > savew)
-           cp_warning_at ("in passing argument %P of `%+D'", parmnum, fndecl);
+           cp_warning_at ("in passing argument %P of %q+D", parmnum, fndecl);
          else if (errorcount > savee)
-           cp_error_at ("in passing argument %P of `%+D'", parmnum, fndecl);
+           cp_error_at ("in passing argument %P of %q+D", parmnum, fndecl);
        }
       return rhs;
     }      
           || TREE_PUBLIC (whats_returned)))
     {
       if (TREE_CODE (valtype) == REFERENCE_TYPE)
-       cp_warning_at ("reference to local variable `%D' returned", 
+       cp_warning_at ("reference to local variable %qD returned", 
                       whats_returned);
       else
-       cp_warning_at ("address of local variable `%D' returned", 
+       cp_warning_at ("address of local variable %qD returned", 
                       whats_returned);
       return;
     }
       && !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl))
       && ! flag_check_new
       && null_ptr_cst_p (retval))
-    warning ("`operator new' must not return NULL unless it is declared `throw()' (or -fcheck-new is in effect)");
+    warning ("%<operator new%> must not return NULL unless it is "
+             "declared %<throw()%> (or -fcheck-new is in effect)");
 
   /* Effective C++ rule 15.  See also start_function.  */
   if (warn_ecpp
        }
 
       if (warn)
-       warning ("`operator=' should return a reference to `*this'");
+       warning ("%<operator=%> should return a reference to %<*this%>");
     }
 
   /* The fabled Named Return Value optimization, as per [class.copy]/15:
 
 {
   if (TREE_CODE (basetype) == FUNCTION_DECL)
     basetype = DECL_CONTEXT (basetype);
-  error ("type `%T' is not a base type for type `%T'", basetype, type);
+  error ("type %qT is not a base type for type %qT", basetype, type);
   return error_mark_node;
 }
 
   if (TREE_CODE (arg) == COMPONENT_REF)
     {
       if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
-        fmt = "%s of data-member `%D' in read-only structure";
+        fmt = "%s of data-member %qD in read-only structure";
       else
-        fmt = "%s of read-only data-member `%D'";
+        fmt = "%s of read-only data-member %qD";
       (*fn) (fmt, string, TREE_OPERAND (arg, 1));
     }
   else if (TREE_CODE (arg) == VAR_DECL)
       if (DECL_LANG_SPECIFIC (arg)
          && DECL_IN_AGGR_P (arg)
          && !TREE_STATIC (arg))
-       fmt = "%s of constant field `%D'";
+       fmt = "%s of constant field %qD";
       else
-       fmt = "%s of read-only variable `%D'";
+       fmt = "%s of read-only variable %qD";
       (*fn) (fmt, string, arg);
     }
   else if (TREE_CODE (arg) == PARM_DECL)
-    (*fn) ("%s of read-only parameter `%D'", string, arg);
+    (*fn) ("%s of read-only parameter %qD", string, arg);
   else if (TREE_CODE (arg) == INDIRECT_REF
            && TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))) == REFERENCE_TYPE
            && (TREE_CODE (TREE_OPERAND (arg, 0)) == VAR_DECL
                || TREE_CODE (TREE_OPERAND (arg, 0)) == PARM_DECL))
-    (*fn) ("%s of read-only reference `%D'", string, TREE_OPERAND (arg, 0));
+    (*fn) ("%s of read-only reference %qD", string, TREE_OPERAND (arg, 0));
   else if (TREE_CODE (arg) == RESULT_DECL)
-    (*fn) ("%s of read-only named return value `%D'", string, arg);
+    (*fn) ("%s of read-only named return value %qD", string, arg);
   else if (TREE_CODE (arg) == FUNCTION_DECL)
-    (*fn) ("%s of function `%D'", string, arg);
+    (*fn) ("%s of function %qD", string, arg);
   else
     (*fn) ("%s of read-only location", string);
 }
        return 0;
 
       if (TREE_CODE (decl) == VAR_DECL)
-       cp_error_at ("cannot declare variable `%+D' to be of abstract "
-                    "type `%T'", decl, type);
+       cp_error_at ("cannot declare variable %q+D to be of abstract "
+                    "type %qT", decl, type);
       else if (TREE_CODE (decl) == PARM_DECL)
-       cp_error_at ("cannot declare parameter `%+D' to be of abstract "
-                    "type `%T'", decl, type);
+       cp_error_at ("cannot declare parameter %q+D to be of abstract "
+                    "type %qT", decl, type);
       else if (TREE_CODE (decl) == FIELD_DECL)
-       cp_error_at ("cannot declare field `%+D' to be of abstract "
-                    "type `%T'", decl, type);
+       cp_error_at ("cannot declare field %q+D to be of abstract "
+                    "type %qT", decl, type);
       else if (TREE_CODE (decl) == FUNCTION_DECL
               && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
-       cp_error_at ("invalid abstract return type for member function `%+#D'",
+       cp_error_at ("invalid abstract return type for member function %q+#D",
                     decl);
       else if (TREE_CODE (decl) == FUNCTION_DECL)
-       cp_error_at ("invalid abstract return type for function `%+#D'", 
+       cp_error_at ("invalid abstract return type for function %q+#D", 
                     decl);
       else if (TREE_CODE (decl) == IDENTIFIER_NODE)
        /* Here we do not have location information, so use error instead
           of cp_error_at.  */
-       error ("invalid abstract type `%T' for `%E'", type, decl);
+       error ("invalid abstract type %qT for %qE", type, decl);
       else
-       cp_error_at ("invalid abstract type for `%+D'", decl);
+       cp_error_at ("invalid abstract type for %q+D", decl);
     }
   else
-    error ("cannot allocate an object of abstract type `%T'", type);
+    error ("cannot allocate an object of abstract type %qT", type);
 
   /* Only go through this once.  */
   if (VEC_length (tree, pure))
       tree fn;
       
       inform ("%J  because the following virtual functions are pure "
-             "within `%T':", TYPE_MAIN_DECL (type), type);
+             "within %qT:", TYPE_MAIN_DECL (type), type);
 
       for (ix = 0; VEC_iterate (tree, pure, ix, fn); ix++)
        inform ("%J\t%#D", fn, fn);
       VEC_truncate (tree, pure, 0);
     }
   else
-    inform ("%J  since type `%T' has pure virtual functions", 
+    inform ("%J  since type %qT has pure virtual functions", 
            TYPE_MAIN_DECL (type), type);
 
   return 1;
                     || TREE_CODE (value) == PARM_DECL
                     || TREE_CODE (value) == FIELD_DECL))
     {
-      (*p_msg_at) ("`%D' has incomplete type", value);
+      (*p_msg_at) ("%qD has incomplete type", value);
       decl = 1;
     }
  retry:
     case UNION_TYPE:
     case ENUMERAL_TYPE:
       if (!decl)
-        (*p_msg) ("invalid use of undefined type `%#T'", type);
+        (*p_msg) ("invalid use of undefined type %q#T", type);
       if (!TYPE_TEMPLATE_INFO (type))
-       (*p_msg_at) ("forward declaration of `%#T'", type);
+       (*p_msg_at) ("forward declaration of %q#T", type);
       else
-       (*p_msg_at) ("declaration of `%#T'", type);
+       (*p_msg_at) ("declaration of %q#T", type);
       break;
 
     case VOID_TYPE:
-      (*p_msg) ("invalid use of `%T'", type);
+      (*p_msg) ("invalid use of %qT", type);
       break;
 
     case ARRAY_TYPE:
 
     case OFFSET_TYPE:
     bad_member:
-      (*p_msg) ("invalid use of member (did you forget the `&' ?)");
+      (*p_msg) ("invalid use of member (did you forget the %<&%> ?)");
       break;
 
     case TEMPLATE_TYPE_PARM:
       if (value && TREE_CODE (value) == COMPONENT_REF)
         goto bad_member;
       else if (value && TREE_CODE (value) == ADDR_EXPR)
-        (*p_msg) ("address of overloaded function with no contextual type information");
+        (*p_msg) ("address of overloaded function with no contextual "
+                  "type information");
       else if (value && TREE_CODE (value) == OVERLOAD)
         (*p_msg) ("overloaded function with no contextual type information");
       else
 
       if (TREE_CODE (init) == TREE_LIST)
        {
-         error ("constructor syntax used, but no constructor declared for type `%T'", type);
+         error ("constructor syntax used, but no constructor declared "
+                 "for type %qT", type);
          init = build_constructor (NULL_TREE, nreverse (init));
        }
     }
        }
       while (BRACE_ENCLOSED_INITIALIZER_P (init))
        {
-         pedwarn ("braces around scalar initializer for `%T'", type);
+         pedwarn ("braces around scalar initializer for %qT", type);
          init = CONSTRUCTOR_ELTS (init);
          if (TREE_CHAIN (init))
-           pedwarn ("ignoring extra initializers for `%T'", type);
+           pedwarn ("ignoring extra initializers for %qT", type);
          init = TREE_VALUE (init);
        }
 
 
   if (COMPLETE_TYPE_P (type) && ! TREE_CONSTANT (TYPE_SIZE (type)))
     {
-      error ("variable-sized object of type `%T' may not be initialized",
+      error ("variable-sized object of type %qT may not be initialized",
                type);
       return error_mark_node;
     }
        {
          if (TYPE_NON_AGGREGATE_CLASS (type))
            {
-             error ("subobject of type `%T' must be initialized by constructor, not by `%E'",
+             error ("subobject of type %qT must be initialized by "
+                     "constructor, not by %qE",
                     type, init);
              return error_mark_node;
            }
              /* Warn when some struct elements are implicitly initialized.  */
              if (warn_missing_field_initializers
                  && (!init || BRACE_ENCLOSED_INITIALIZER_P (init)))
-               warning ("missing initializer for member `%D'", field);
+               warning ("missing initializer for member %qD", field);
            }
          else
            {
              if (TREE_READONLY (field))
-               error ("uninitialized const member `%D'", field);
+               error ("uninitialized const member %qD", field);
              else if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field)))
-               error ("member `%D' with uninitialized const fields",
-                         field);
+               error ("member %qD with uninitialized const fields", field);
              else if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
-               error ("member `%D' is uninitialized reference", field);
+               error ("member %qD is uninitialized reference", field);
 
              /* Warn when some struct elements are implicitly initialized
                 to zero.  */
              if (warn_missing_field_initializers
                  && (!init || BRACE_ENCLOSED_INITIALIZER_P (init)))
-               warning ("missing initializer for member `%D'", field);
+               warning ("missing initializer for member %qD", field);
 
              if (! zero_init_p (TREE_TYPE (field)))
                next1 = build_zero_init (TREE_TYPE (field),
              if (temp)
                field = temp, win = 1;
              else
-               error ("no field `%D' in union being initialized",
-                         TREE_PURPOSE (tail));
+               error ("no field %qD in union being initialized",
+                       TREE_PURPOSE (tail));
            }
          if (!win)
            TREE_VALUE (tail) = error_mark_node;
        }
       else if (field == 0)
        {
-         error ("union `%T' with no named members cannot be initialized",
-                   type);
+         error ("union %qT with no named members cannot be initialized",
+                 type);
          TREE_VALUE (tail) = error_mark_node;
        }
 
 
       if (last_rval == NULL_TREE)
        {
-         error ("base operand of `->' has non-pointer type `%T'", type);
+         error ("base operand of %<->%> has non-pointer type %qT", type);
          return error_mark_node;
        }
 
     }
 
   if (types_memoized)
-    error ("result of `operator->()' yields non-pointer result");
+    error ("result of %<operator->()%> yields non-pointer result");
   else
-    error ("base operand of `->' is not a pointer");
+    error ("base operand of %<->%> is not a pointer");
   return error_mark_node;
 }
 
   ptrmem_type = TREE_TYPE (component);
   if (!TYPE_PTR_TO_MEMBER_P (ptrmem_type))
     {
-      error ("`%E' cannot be used as a member pointer, since it is of type `%T'", 
+      error ("%qE cannot be used as a member pointer, since it is of "
+             "type %qT", 
             component, ptrmem_type);
       return error_mark_node;
     }
   objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));  
   if (! IS_AGGR_TYPE (objtype))
     {
-      error ("cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'",
-               component, datum, objtype);
+      error ("cannot apply member pointer %qE to %qE, which is of "
+             "non-aggregate type %qT",
+             component, datum, objtype);
       return error_mark_node;
     }
 
       if (!binfo)
        {
        mismatch:
-         error ("pointer to member type `%T' incompatible with object type `%T'",
+         error ("pointer to member type %qT incompatible with object "
+                 "type %qT",
                 type, objtype);
          return error_mark_node;
        }
        {
          if (decl)
            error
-             ("call to function `%D' which throws incomplete type `%#T'",
+             ("call to function %qD which throws incomplete type %q#T",
               decl, type);
          else
-           error ("call to function which throws incomplete type `%#T'",
+           error ("call to function which throws incomplete type %q#T",
                   decl);
        }
     }