diff --git a/include/clang/Basic/DiagnosticKinds.def b/include/clang/Basic/DiagnosticKinds.def
index b1c8bb2..6e7e58e 100644
--- a/include/clang/Basic/DiagnosticKinds.def
+++ b/include/clang/Basic/DiagnosticKinds.def
@@ -295,9 +295,9 @@
 DIAG(ext_thread_before, EXTENSION,
      "'__thread' before 'static'")
 DIAG(ext_integer_increment_complex, EXTENSION,
-     "ISO C does not support '++'/'--' on complex integer types")
+     "ISO C does not support '++'/'--' on complex integer type %0")
 DIAG(ext_integer_complement_complex, EXTENSION,
-     "ISO C does not support '~' for complex conjugation")
+     "ISO C does not support '~' for complex conjugation of %0")
      
 DIAG(ext_mixed_decls_code, EXTENSION,
      "ISO C90 forbids mixing declarations and code")
@@ -428,7 +428,7 @@
 DIAG(warn_objc_protocol_qualifier_missing_id, WARNING,
      "protocol qualifiers without 'id' is archaic")
 DIAG(warn_objc_array_of_interfaces, WARNING,
-     "array of interface '%0' should probably be an array of pointers")
+     "array of interface %0 should probably be an array of pointers")
 
 DIAG(err_invalid_receiver_to_message, ERROR,
      "invalid receiver to message expression")
@@ -515,9 +515,9 @@
 DIAG(warn_method_not_found_in_protocol, WARNING,
      "method %objcinstance0 not found in protocol (return type defaults to 'id')")
 DIAG(err_collection_expr_type, ERROR,
-     "collection expression type ('%0') is not a valid object")
+     "collection expression type %0 is not a valid object")
 DIAG(err_selector_element_type, ERROR,
-     "selector element type ('%0') is not a valid object")
+     "selector element type %0 is not a valid object")
 DIAG(err_selector_element_not_lvalue, ERROR,
     "selector element is not a valid lvalue") 
 DIAG(err_toomany_element_decls, ERROR,
@@ -527,7 +527,7 @@
 DIAG(error_missing_method_context, ERROR,
      "missing context for method declaration")
 DIAG(error_bad_receiver_type, ERROR,
-     "bad receiver type '%0'")
+     "bad receiver type %0")
 DIAG(error_no_super_class, ERROR,
      "no super class declared in @interface for %0")
 DIAG(error_missing_property_context, ERROR,
@@ -705,8 +705,7 @@
 DIAG(err_member_initialization, ERROR,
     "'%0' can only be initialized if it is a static const integral data member")
 DIAG(err_implicit_object_parameter_init, ERROR,
-     "cannot initialize object parameter of type '%0' with an expression "
-     "of type '%1'")
+     "cannot initialize object parameter of type %0 with an expression of type %1")
 
 // C++ constructors
 DIAG(err_constructor_cannot_be, ERROR,
@@ -739,16 +738,18 @@
      "destructor cannot be declared using a typedef %0 of the class name")
 
 // C++ initialization
+// FIXME: passing in an English string as %1!
 DIAG(err_not_reference_to_const_init, ERROR,
-     "non-const reference to type '%0' cannot be initialized with a %1 of type '%2'")
+     "non-const reference to type %0 cannot be initialized with a %1 of type %2")
+// FIXME: passing in an English string as %1!
 DIAG(err_reference_init_drops_quals, ERROR,
-     "initialization of reference to type '%0' with a %1 of type '%2' drops qualifiers")
+     "initialization of reference to type %0 with a %1 of type %2 drops qualifiers")
 DIAG(err_reference_var_requires_init, ERROR,
      "declaration of reference variable %0 requires an initializer")
 DIAG(err_const_var_requires_init, ERROR,
      "declaration of const variable '%0' requires an initializer")
 DIAG(err_init_non_aggr_init_list, ERROR,
-     "initialization of non-aggregate type '%0' with an initializer list")
+     "initialization of non-aggregate type %0 with an initializer list")
 
 // Objective-C++
 DIAG(err_objc_decls_may_only_appear_in_global_scope, ERROR,
@@ -760,7 +761,7 @@
 DIAG(err_attribute_missing_parameter_name, ERROR,
      "attribute requires unquoted parameter")
 DIAG(err_attribute_invalid_vector_type, ERROR,
-     "invalid vector type '%0'")
+     "invalid vector type %0")
 DIAG(err_attribute_argument_not_int, ERROR,
      "'%0' attribute requires integer constant")
 DIAG(err_attribute_argument_n_not_int, ERROR,
@@ -782,13 +783,13 @@
 DIAG(err_attribute_zero_size, ERROR,
      "zero vector size")
 DIAG(err_typecheck_vector_not_convertable, ERROR,
-     "can't convert between vector values of different size ('%0' and '%1')")
+     "can't convert between vector values of different size (%0 and %1)")
 DIAG(err_typecheck_ext_vector_not_typedef, ERROR,
      "ext_vector_type only applies to types, not variables")
 DIAG(err_ext_vector_component_exceeds_length, ERROR,
-     "vector component access exceeds type '%0'")
+     "vector component access exceeds type %0")
 DIAG(err_ext_vector_component_requires_even, ERROR,
-     "vector component access invalid for odd-sized type '%0'")
+     "vector component access invalid for odd-sized type %0")
 DIAG(err_ext_vector_component_name_illegal, ERROR,
      "illegal vector component name '%0'")
 DIAG(err_ext_vector_component_access, ERROR,
@@ -894,7 +895,7 @@
 DIAG(err_ovl_candidate, NOTE,
      "candidate function")
 DIAG(err_ovl_builtin_candidate, NOTE,
-     "built-in candidate function '%0'")
+     "built-in candidate function %0")
 DIAG(err_ovl_no_viable_function_in_init, ERROR,
      "no matching constructor for initialization of %0"
      "%plural{0:|1:; candidate is|:; candidates are:}1")
@@ -905,12 +906,12 @@
 DIAG(err_ovl_no_viable_oper, ERROR,
      "no viable overloaded '%0'; candidate%plural{1: is|:s are}1:")
 DIAG(err_ovl_no_viable_object_call, ERROR,
-     "no matching function for call to object of type '%0'"
+     "no matching function for call to object of type %0"
      "%plural{0:|1:; candidate is|:; candidates are:}1")
 DIAG(err_ovl_ambiguous_object_call, ERROR,
-     "call to object of type '%0' is ambiguous; candidates are:")
+     "call to object of type %0 is ambiguous; candidates are:")
 DIAG(err_ovl_surrogate_cand, NOTE,
-     "conversion candidate of type '%0'")
+     "conversion candidate of type %0")
 
 DIAG(err_unexpected_typedef, ERROR,
      "unexpected type name %0: expected expression")
@@ -933,7 +934,7 @@
 DIAG(err_redefinition_different_kind, ERROR,
      "redefinition of %0 as different kind of symbol")
 DIAG(err_redefinition_different_typedef, ERROR,
-     "typedef redefinition with different types ('%0' vs '%1')")
+     "typedef redefinition with different types (%0 vs %1)")
 DIAG(err_conflicting_types, ERROR,
      "conflicting types for %0")
 DIAG(err_nested_redefinition, ERROR,
@@ -963,17 +964,17 @@
 DIAG(err_typecheck_negative_array_size, ERROR,
      "array size is negative")
 DIAG(warn_typecheck_function_qualifiers, WARNING,
-     "qualifier on function type '%0' has unspecified behavior")
+     "qualifier on function type %0 has unspecified behavior")
 DIAG(err_typecheck_invalid_restrict_not_pointer, ERROR,
-     "restrict requires a pointer or reference ('%0' is invalid)")
+     "restrict requires a pointer or reference (%0 is invalid)")
 DIAG(err_typecheck_invalid_restrict_invalid_pointee, ERROR,
-     "pointer to function type ('%0') may not be 'restrict' qualified")
+     "pointer to function type %0 may not be 'restrict' qualified")
 DIAG(ext_typecheck_zero_array_size, EXTENSION,
      "zero size arrays are an extension")
 DIAG(err_at_least_one_initializer_needed_to_size_array, ERROR,
     "at least one initializer value required to size array")
 DIAG(err_array_size_non_int, ERROR,
-     "size of array has non-integer type '%0'")
+     "size of array has non-integer type %0")
 DIAG(err_init_element_not_constant, ERROR,
      "initializer element is not a compile-time constant")
 DIAG(err_block_extern_cant_init, ERROR,
@@ -999,7 +1000,7 @@
 DIAG(err_illegal_initializer, ERROR,
      "illegal initializer (only variables can be initialized)")
 DIAG(err_illegal_initializer_type, ERROR,
-     "illegal initializer type ('%0')")
+     "illegal initializer type %0")
 DIAG(err_implicit_empty_initializer, ERROR,
      "initializer for aggregate with no elements requires explicit braces")
 
@@ -1014,7 +1015,7 @@
      "implicit declaration of function %0 is invalid in C99")
 
 DIAG(err_func_returning_array_function, ERROR,
-     "function cannot return array or function type '%0'")
+     "function cannot return array or function type %0")
 DIAG(err_field_declared_as_function, ERROR,
      "field %0 declared as a function")
 DIAG(err_field_incomplete, ERROR,
@@ -1026,11 +1027,11 @@
 DIAG(ext_flexible_array_in_struct, EXTENSION,
      "%0 may not be nested in a struct due to flexible array member")
 DIAG(err_flexible_array_in_array, ERROR,
-     "'%0' may not be used as an array element due to flexible array member")
+     "%0 may not be used as an array element due to flexible array member")
 DIAG(err_illegal_decl_array_of_functions, ERROR,
      "'%0' declared as array of functions")
 DIAG(err_illegal_decl_array_incomplete_type, ERROR,
-     "array has incomplete element type '%0'")
+     "array has incomplete element type %0")
 DIAG(err_illegal_decl_array_of_references, ERROR,
      "'%0' declared as array of references")
 DIAG(err_illegal_decl_pointer_to_reference, ERROR,
@@ -1057,14 +1058,15 @@
      "invalid application of 'sizeof' to a function type")
 DIAG(ext_sizeof_void_type, EXTENSION,
      "invalid application of '%0' to a void type")
+// FIXME: merge with %select
 DIAG(err_sizeof_incomplete_type, ERROR,
-     "invalid application of 'sizeof' to an incomplete type '%0'")
+     "invalid application of 'sizeof' to an incomplete type %0")
 DIAG(err_alignof_incomplete_type, ERROR,
-     "invalid application of '__alignof' to an incomplete type '%0'")
+     "invalid application of '__alignof' to an incomplete type %0")
 DIAG(err_offsetof_record_type, ERROR,
-     "offsetof requires struct, union, or class type, '%0' invalid")
+     "offsetof requires struct, union, or class type, %0 invalid")
 DIAG(err_offsetof_array_type, ERROR,
-     "offsetof requires array type, '%0' invalid")
+     "offsetof requires array type, %0 invalid")
 DIAG(ext_offsetof_extended_field_designator, EXTENSION,
      "using extended field designator is an extension")
 DIAG(err_expected_field_designator, ERROR,
@@ -1099,25 +1101,27 @@
 DIAG(err_typecheck_subscript, ERROR,
      "array subscript is not an integer")
 DIAG(err_typecheck_subscript_not_object, ERROR,
-     "illegal subscript of non-object type '%0'")
+     "illegal subscript of non-object type %0")
 DIAG(err_typecheck_member_reference_struct_union, ERROR,
-     "member reference base type ('%0') is not a structure or union")
+     "member reference base type %0 is not a structure or union")
 DIAG(err_typecheck_member_reference_ivar, ERROR,
      "%0 does not have a member named %1")
 DIAG(err_typecheck_member_reference_arrow, ERROR,
-     "member reference type '%0' is not a pointer")
+     "member reference type %0 is not a pointer")
 DIAG(err_typecheck_incomplete_tag, ERROR,
      "incomplete definition of type %0")
 DIAG(err_typecheck_no_member, ERROR,
      "no member named %0")
+// FIXME: Improve with %select
 DIAG(err_typecheck_illegal_increment_decrement, ERROR,
-     "cannot modify value of type '%0'")
+     "cannot modify value of type %0")
 DIAG(err_typecheck_arithmetic_incomplete_type, ERROR,
-     "arithmetic on pointer to incomplete type '%0'")
+     "arithmetic on pointer to incomplete type %0")
 DIAG(err_typecheck_decl_incomplete_type, ERROR,
      "variable has incomplete type %0")
+// FIXME: Use %select
 DIAG(err_realimag_invalid_type, ERROR,
-     "invalid type '%0' to __real or __imag operator")
+     "invalid type %0 to __real or __imag operator")
 DIAG(err_typecheck_sclass_fscope, ERROR,
      "illegal storage class on file-scoped variable")
 DIAG(err_typecheck_sclass_func, ERROR,
@@ -1127,19 +1131,19 @@
 DIAG(err_typecheck_invalid_lvalue_addrof, ERROR,
      "address expression must be an lvalue or a function designator")
 DIAG(err_typecheck_unary_expr, ERROR,
-     "invalid argument type to unary expression '%0'")
+     "invalid argument type %0 to unary expression")
 DIAG(err_typecheck_indirection_requires_pointer, ERROR,
      "indirection requires pointer operand (%0 invalid)")
 DIAG(err_typecheck_invalid_operands, ERROR,
      "invalid operands to binary expression (%0 and %1)")
 DIAG(err_typecheck_sub_ptr_object, ERROR,
-     "'%0' is not a complete object type")
+     "subtraction of pointer %0 requires pointee to be a complete object type")
 DIAG(err_typecheck_sub_ptr_compatible, ERROR,
-     "'%0' and '%1' are not pointers to compatible types")
+     "%0 and %1 are not pointers to compatible types")
 DIAG(ext_typecheck_comparison_of_pointer_integer, WARNING,
-     "comparison between pointer and integer ('%0' and '%1')")
+     "comparison between pointer and integer (%0 and %1)")
 DIAG(ext_typecheck_comparison_of_distinct_pointers, WARNING,
-     "comparison of distinct pointer types ('%0' and '%1')")
+     "comparison of distinct pointer types (%0 and %1)")
 DIAG(err_typecheck_assign_const, ERROR,
      "read-only variable is not assignable")
 
@@ -1155,7 +1159,7 @@
 DIAG(err_invalid_non_static_member_use, ERROR,
      "invalid use of nonstatic data member %0")
 DIAG(err_invalid_incomplete_type_use, ERROR,
-     "invalid use of incomplete type '%0'")
+     "invalid use of incomplete type %0")
 DIAG(err_builtin_func_cast_more_than_one_arg, ERROR,
      "function-style cast to a builtin type can only take one argument")
 DIAG(err_builtin_direct_init_more_than_one_arg, ERROR,
@@ -1165,13 +1169,13 @@
 
 // C++ casts
 DIAG(err_bad_cxx_cast_generic, ERROR,
-     "%0 from '%2' to '%1' is not allowed")
+     "%0 from %2 to %1 is not allowed")
 DIAG(err_bad_cxx_cast_rvalue, ERROR,
-     "%0 from rvalue to reference type '%1'")
+     "%0 from rvalue to reference type %1")
 DIAG(err_bad_cxx_cast_const_away, ERROR,
-     "%0 from '%2' to '%1' casts away constness")
+     "%0 from %2 to %1 casts away constness")
 DIAG(err_bad_const_cast_dest, ERROR,
-     "const_cast to '%0', which is not a reference, pointer-to-object, "
+     "const_cast to %0, which is not a reference, pointer-to-object, "
      "or pointer-to-data-member")
 DIAG(err_bad_reinterpret_cast_same_type, ERROR,
      "source and destination type of reinterpret_cast are not distinct")
@@ -1179,39 +1183,41 @@
      "reinterpret_cast between pointer-to-function and pointer-to-object is "
      "an extension")
 DIAG(err_bad_reinterpret_cast_small_int, ERROR,
-     "cast from pointer to smaller type '%0' loses information")
+     "cast from pointer to smaller type %0 loses information")
 DIAG(err_bad_dynamic_cast_not_ref_or_ptr, ERROR,
-     "'%0' is not a reference or pointer")
+     "%0 is not a reference or pointer")
 DIAG(err_bad_dynamic_cast_not_class, ERROR,
-     "'%0' is not a class")
+     "%0 is not a class")
 DIAG(err_bad_dynamic_cast_incomplete, ERROR,
-     "'%0' is incomplete")
+     "%0 is an incomplete type")
 DIAG(err_bad_dynamic_cast_not_ptr, ERROR,
-     "'%0' is not a pointer")
+     "%0 is not a pointer")
 DIAG(err_bad_dynamic_cast_not_polymorphic, ERROR,
-     "'%0' is not polymorphic")
+     "%0 is not polymorphic")
+// FIXME: Display the path somehow better.
 DIAG(err_ambiguous_base_to_derived_cast, ERROR,
-     "ambiguous static_cast from base '%0' to derived '%1':%2")
+     "ambiguous static_cast from base %0 to derived %1:%2")
 DIAG(err_static_downcast_via_virtual, ERROR,
-     "cannot cast '%0' to '%1' via virtual base '%2'")
+     "cannot cast %0 to %1 via virtual base %2")
 
 // Other C++ expressions
 DIAG(err_need_header_before_typeid, ERROR,
      "you need to include <typeinfo> before using the 'typeid' operator")
+// FIXME: merge with %select
 DIAG(err_new_function, ERROR,
-     "cannot allocate function type '%0' with new")
+     "cannot allocate function type %0 with new")
 DIAG(err_new_incomplete, ERROR,
-     "cannot allocate incomplete type '%0' with new")
+     "cannot allocate incomplete type %0 with new")
 DIAG(err_new_reference, ERROR,
-     "cannot allocate reference type '%0' with new")
+     "cannot allocate reference type %0 with new")
 DIAG(err_new_array_nonconst, ERROR,
      "only the first dimension of an allocated array may be non-const")
 DIAG(err_new_uninitialized_const, ERROR,
      "must provide an initializer if the allocated object is 'const'")
 DIAG(err_delete_operand, ERROR,
-     "cannot delete expression of type '%0'")
+     "cannot delete expression of type %0")
 DIAG(warn_delete_incomplete, WARNING,
-     "deleting pointer to incomplete type '%0' may cause undefined behaviour")
+     "deleting pointer to incomplete type %0 may cause undefined behaviour")
 
 DIAG(err_invalid_use_of_function_type, ERROR,
      "a function type is not allowed here")
@@ -1220,7 +1226,7 @@
 DIAG(err_type_defined_in_condition, ERROR,
      "types may not be defined in conditions")
 DIAG(err_typecheck_bool_condition, ERROR,
-    "expression must have bool type (or be convertible to bool) ('%0' invalid)")
+    "expression must have bool type (or be convertible to bool) (%0 invalid)")
 DIAG(err_expected_class_or_namespace, ERROR,
      "expected a class or namespace")
 DIAG(err_invalid_declarator_scope, ERROR,
@@ -1252,20 +1258,20 @@
 DIAG(err_int_to_block_pointer, ERROR,
      "invalid conversion %2 integer %1, expected block pointer %0")
 DIAG(err_typecheck_comparison_of_distinct_blocks, ERROR,
-     "comparison of distinct block types ('%0' and '%1')")
+     "comparison of distinct block types (%0 and %1)")
 DIAG(ext_typecheck_convert_incompatible_block_pointer, EXTWARN,
      "incompatible block pointer types %2 %1, expected %0")
 DIAG(ext_typecheck_convert_pointer_void_block, EXTENSION,
      "%2 %1 converts between void* and block pointer, expected %0")
      
 DIAG(err_typecheck_array_not_modifiable_lvalue, ERROR,
-     "array type '%0' is not assignable")
+     "array type %0 is not assignable")
 DIAG(err_typecheck_non_object_not_modifiable_lvalue, ERROR,
-     "non-object type '%0' is not assignable")
+     "non-object type %0 is not assignable")
 DIAG(err_typecheck_expression_not_modifiable_lvalue, ERROR,
      "expression is not assignable")
 DIAG(err_typecheck_incomplete_type_not_modifiable_lvalue, ERROR,
-     "incomplete type '%0' is not assignable")
+     "incomplete type %0 is not assignable")
 DIAG(err_typecheck_lvalue_casts_not_supported, ERROR,
      "assignment to cast is illegal, lvalue casts are not supported")
 
@@ -1274,7 +1280,7 @@
 DIAG(err_block_decl_ref_not_modifiable_lvalue, ERROR,
      "variable is not assignable (missing __block type specifier)")
 DIAG(err_typecheck_call_not_function, ERROR,
-     "called object type '%0' is not a function or function pointer")
+     "called object type %0 is not a function or function pointer")
 DIAG(err_typecheck_call_too_few_args, ERROR,
      "too few arguments to %select{function|block|method}0 call")
 DIAG(err_typecheck_call_too_many_args, ERROR,
@@ -1282,19 +1288,19 @@
 DIAG(err_typecheck_closure_too_many_args, ERROR,
      "too many arguments to closure call")
 DIAG(err_typecheck_call_invalid_ordered_compare, ERROR,
-     "ordered compare requires two args of floating point type ('%0' and '%1')")
+     "ordered compare requires two args of floating point type (%0 and %1)")
 DIAG(err_typecheck_cond_expect_scalar, ERROR,
-     "used type '%0' where arithmetic or pointer type is required")
+     "used type %0 where arithmetic or pointer type is required")
 DIAG(ext_typecheck_cond_one_void, EXTENSION,
      "C99 forbids conditional expressions with only one void side")
 DIAG(ext_typecheck_cast_nonscalar, EXTENSION,
-     "C99 forbids casting nonscalar to the same type")
+     "C99 forbids casting nonscalar type %0 to the same type")
 DIAG(err_typecheck_expect_scalar_operand, ERROR,
-     "operand of type '%0' where arithmetic or pointer type is required")
+     "operand of type %0 where arithmetic or pointer type is required")
 DIAG(err_typecheck_cond_incompatible_operands, ERROR,
-     "incompatible operand types ('%0' and '%1')")
+     "incompatible operand types (%0 and %1)")
 DIAG(warn_typecheck_cond_incompatible_pointers, WARNING,
-     "pointer type mismatch ('%0' and '%1')")
+     "pointer type mismatch (%0 and %1)")
 DIAG(err_typecheck_choose_expr_requires_constant, ERROR,
      "'__builtin_choose_expr' requires a constant expression")
 DIAG(ext_typecheck_expression_not_constant_but_accepted, EXTENSION,
@@ -1312,20 +1318,22 @@
 DIAG(err_asm_invalid_input_constraint, ERROR,
     "invalid input constraint '%0' in asm")
 DIAG(err_asm_invalid_type_in_input, ERROR,
-    "invalid type '%0' in asm input for constraint '%1'")
+    "invalid type %0 in asm input for constraint '%1'")
 DIAG(err_asm_unknown_register_name, ERROR,
     "unknown register name '%0' in asm")
 DIAG(err_invalid_conversion_between_vectors, ERROR,
-    "invalid conversion between vector type '%0' and '%1' of different size")
+    "invalid conversion between vector type %0 and %1 of different size")
 DIAG(err_invalid_conversion_between_vector_and_integer, ERROR,
-    "invalid conversion between vector type '%0' and integer type '%1' "
+    "invalid conversion between vector type %0 and integer type %1 "
     "of different size")
 DIAG(err_invalid_conversion_between_vector_and_scalar, ERROR,
-    "invalid conversion between vector type '%0' and scalar type '%1'")
+    "invalid conversion between vector type %0 and scalar type %1")
 DIAG(err_overload_expr_requires_non_zero_constant, ERROR,
      "overload requires a non-zero constant expression as first argument")
 DIAG(err_overload_incorrect_fntype, ERROR,
      "argument is not a function, or has wrong number of parameters")
+     
+// FIXME: PASSING TYPES AS STRING.
 DIAG(err_overload_no_match, ERROR,
      "no matching overload found for arguments of type '%0'")
 DIAG(err_overload_multiple_match, ERROR,
@@ -1359,9 +1367,10 @@
 DIAG(err_incomplete_base_class, ERROR,
      "base class has incomplete type")
 DIAG(err_duplicate_base_class, ERROR,
-     "base class '%0' specified more than once as a direct base class")
+     "base class %0 specified more than once as a direct base class")
+// FIXME: better way to display derivation?  Pass entire thing into diagclient?
 DIAG(err_ambiguous_derived_to_base_conv, ERROR,
-     "ambiguous conversion from derived class '%0' to base class '%1':%2")
+     "ambiguous conversion from derived class %0 to base class %1:%2")
 
 // C++ operator overloading
 DIAG(err_operator_overload_needs_class_or_enum, ERROR,
@@ -1380,7 +1389,7 @@
      "overloaded %0 must be a non-static member function")
 DIAG(err_operator_overload_post_incdec_must_be_int, ERROR,
      "parameter of overloaded post-%select{increment|decrement}1 operator must"
-     " have type 'int' (not '%0')")
+     " have type 'int' (not %0)")
 DIAG(err_operator_missing_type_specifier, ERROR,
      "missing type specifier after 'operator'")
 
@@ -1400,12 +1409,11 @@
 DIAG(err_conv_function_redeclared, ERROR,
      "conversion function cannot be redeclared")
 DIAG(warn_conv_to_self_not_used, WARNING,
-     "conversion function converting '%0' to itself will never be used")
+     "conversion function converting %0 to itself will never be used")
 DIAG(warn_conv_to_base_not_used, WARNING,
-     "conversion function converting '%0' to its base class '%1' will never "
-     "be used")
+     "conversion function converting %0 to its base class %1 will never be used")
 DIAG(warn_conv_to_void_not_used, WARNING,
-     "conversion function converting '%0' to '%1' will never be used")
+     "conversion function converting %0 to %1 will never be used")
 
 DIAG(warn_not_compound_assign, WARNING,
      "use of unary operator that may be intended as compound assignment (%0=)")
@@ -1434,9 +1442,9 @@
 DIAG(warn_printf_asterisk_precision_missing_arg, WARNING,
      "'.*' specified field precision is missing a matching 'int' argument")
 DIAG(warn_printf_asterisk_width_wrong_type, WARNING,
-     "field width should have type 'int', but argument has type '%0'")
+     "field width should have type 'int', but argument has type %0")
 DIAG(warn_printf_asterisk_precision_wrong_type, WARNING,
-     "field precision should have type 'int', but argument has type '%0'")
+     "field precision should have type 'int', but argument has type %0")
 
 // CHECK: returning address/reference of stack memory
 DIAG(warn_ret_stack_addr, WARNING,
@@ -1491,9 +1499,9 @@
 DIAG(warn_case_empty_range, WARNING,
      "empty case range specified")
 DIAG(err_typecheck_statement_requires_scalar, ERROR,
-     "statement requires expression of scalar type ('%0' invalid)")
+     "statement requires expression of scalar type (%0 invalid)")
 DIAG(err_typecheck_statement_requires_integer, ERROR,
-    "statement requires expression of integer type ('%0' invalid)")
+    "statement requires expression of integer type (%0 invalid)")
 DIAG(err_multiple_default_labels_defined, ERROR,
     "multiple default labels in one switch")
 DIAG(warn_empty_if_body, WARNING,
@@ -1503,7 +1511,7 @@
 DIAG(warn_second_parameter_of_va_start_not_last_named_argument, WARNING,
     "second parameter of 'va_start' not last named argument")
 DIAG(err_first_argument_to_va_arg_not_of_type_va_list, ERROR,
-    "first argument to 'va_arg' is of type '%0' and not 'va_list'")
+    "first argument to 'va_arg' is of type %0 and not 'va_list'")
   
 DIAG(warn_return_missing_expr, WARNING,
      "non-void %select{function|method}1 %0 should return a value")
diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp
index 09f6efb..bbc50d6 100644
--- a/lib/Sema/SemaChecking.cpp
+++ b/lib/Sema/SemaChecking.cpp
@@ -223,7 +223,7 @@
   if (!Res->isRealFloatingType())
     return Diag(OrigArg0->getLocStart(), 
                 diag::err_typecheck_call_invalid_ordered_compare)
-      << OrigArg0->getType().getAsString() << OrigArg1->getType().getAsString()
+      << OrigArg0->getType() << OrigArg1->getType()
       << SourceRange(OrigArg0->getLocStart(), OrigArg1->getLocEnd());
   
   return false;
@@ -574,10 +574,10 @@
       
       if (Str[StrIdx-1] == '.')
         Diag(Loc, diag::warn_printf_asterisk_precision_wrong_type)
-          << E->getType().getAsString() << E->getSourceRange();
+          << E->getType() << E->getSourceRange();
       else
         Diag(Loc, diag::warn_printf_asterisk_width_wrong_type)
-          << E->getType().getAsString() << E->getSourceRange();
+          << E->getType() << E->getSourceRange();
       
       break;
     }
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 4f71f06..1fc2c99 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -336,8 +336,7 @@
       Context.getCanonicalType(Old->getUnderlyingType()) != 
       Context.getCanonicalType(New->getUnderlyingType())) {
     Diag(New->getLocation(), diag::err_redefinition_different_typedef)
-      << New->getUnderlyingType().getAsString()
-      << Old->getUnderlyingType().getAsString();
+      << New->getUnderlyingType() << Old->getUnderlyingType();
     Diag(Old->getLocation(), diag::note_previous_definition);
     return Old;
   }
@@ -757,7 +756,7 @@
       const CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(ClassRec->getDecl());
       if (!ClassDecl->isAggregate())
         return Diag(InitLoc, diag::err_init_non_aggr_init_list)
-           << DeclType.getAsString() << Init->getSourceRange();
+           << DeclType << Init->getSourceRange();
     }
   }
 
@@ -906,8 +905,7 @@
       case DeclSpec::SCS_auto:        
       case DeclSpec::SCS_register:
       case DeclSpec::SCS_mutable:
-        Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_func)
-          << R.getAsString();
+        Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_func);
         InvalidDecl = true;
         break;
       case DeclSpec::SCS_unspecified: SC = FunctionDecl::None; break;
@@ -1186,8 +1184,7 @@
         // C99 6.9p2: The storage-class specifiers auto and register shall not
         // appear in the declaration specifiers in an external declaration.
         if (SC == VarDecl::Auto || SC == VarDecl::Register) {
-          Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_fscope)
-            << R.getAsString();
+          Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_fscope);
           InvalidDecl = true;
         }
       }
diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp
index ce63d13..2e6108c 100644
--- a/lib/Sema/SemaDeclAttr.cpp
+++ b/lib/Sema/SemaDeclAttr.cpp
@@ -158,8 +158,7 @@
   // unlike gcc's vector_size attribute, we do not allow vectors to be defined
   // in conjunction with complex types (pointers, arrays, functions, etc.).
   if (!curType->isIntegerType() && !curType->isRealFloatingType()) {
-    S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type)
-      << curType.getAsString();
+    S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type) << curType;
     return;
   }
   // unlike gcc's vector_size attribute, the size is specified as the 
@@ -229,8 +228,7 @@
   }
   // the base type must be integer or float.
   if (!CurType->isIntegerType() && !CurType->isRealFloatingType()) {
-    S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type)
-      << CurType.getAsString();
+    S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type) << CurType;
     return;
   }
   unsigned typeSize = static_cast<unsigned>(S.Context.getTypeSize(CurType));
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index b99f2e0..ab8ae72 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -351,7 +351,7 @@
       //   derived class more than once.
       Diag(BaseSpecs[idx]->getSourceRange().getBegin(),
            diag::err_duplicate_base_class)
-        << KnownBaseTypes[NewBaseType]->getType().getAsString()
+        << KnownBaseTypes[NewBaseType]->getType()
         << BaseSpecs[idx]->getSourceRange();
 
       // Delete the duplicate base class specifier; we're going to
@@ -1212,13 +1212,13 @@
     ConvType = Context.getCanonicalType(ConvType).getUnqualifiedType();
     if (ConvType == ClassType)
       Diag(Conversion->getLocation(), diag::warn_conv_to_self_not_used)
-        << ClassType.getAsString();
+        << ClassType;
     else if (IsDerivedFrom(ClassType, ConvType))
       Diag(Conversion->getLocation(), diag::warn_conv_to_base_not_used)
-        <<  ClassType.getAsString() << ConvType.getAsString();
+        <<  ClassType << ConvType;
   } else if (ConvType->isVoidType()) {
     Diag(Conversion->getLocation(), diag::warn_conv_to_void_not_used)
-      << ClassType.getAsString() << ConvType.getAsString();
+      << ClassType << ConvType;
   }
 
   ClassDecl->addConversionFunction(Context, Conversion);
@@ -1691,9 +1691,8 @@
     if (!ICS)
       Diag(Init->getSourceRange().getBegin(),
            diag::err_not_reference_to_const_init)
-        <<  T1.getAsString()
-        << (InitLvalue != Expr::LV_Valid? "temporary" : "value")
-        <<  T2.getAsString() << Init->getSourceRange();
+        << T1 << (InitLvalue != Expr::LV_Valid? "temporary" : "value")
+        << T2 << Init->getSourceRange();
     return true;
   }
 
@@ -1755,9 +1754,8 @@
     if (!ICS)
       Diag(Init->getSourceRange().getBegin(),
            diag::err_reference_init_drops_quals)
-        << T1.getAsString()
-        << (InitLvalue != Expr::LV_Valid? "temporary" : "value")
-        << T2.getAsString() << Init->getSourceRange();
+        << T1 << (InitLvalue != Expr::LV_Valid? "temporary" : "value")
+        << T2 << Init->getSourceRange();
     return true;
   }
 
@@ -1915,7 +1913,7 @@
     if (!ParamIsInt)
       return Diag(LastParam->getLocation(),
                   diag::err_operator_overload_post_incdec_must_be_int) 
-        << LastParam->getType().getAsString() << (Op == OO_MinusMinus);
+        << LastParam->getType() << (Op == OO_MinusMinus);
   }
 
   return false;
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp
index f81c2b8..fdd5732 100644
--- a/lib/Sema/SemaExpr.cpp
+++ b/lib/Sema/SemaExpr.cpp
@@ -700,7 +700,7 @@
   else if (exprType->isIncompleteType())
     return Diag(OpLoc, isSizeof ? diag::err_sizeof_incomplete_type : 
                                   diag::err_alignof_incomplete_type)
-      << exprType.getAsString() << ExprRange;
+      << exprType << ExprRange;
 
   return false;
 }
@@ -747,7 +747,7 @@
     return V->getType();
   
   // Reject anything else.
-  Diag(Loc, diag::err_realimag_invalid_type) << V->getType().getAsString();
+  Diag(Loc, diag::err_realimag_invalid_type) << V->getType();
   return QualType();
 }
 
@@ -999,7 +999,7 @@
   if (!ResultType->isObjectType())
     return Diag(BaseExpr->getLocStart(), 
                 diag::err_typecheck_subscript_not_object)
-      << BaseExpr->getType().getAsString() << BaseExpr->getSourceRange();
+      << BaseExpr->getType() << BaseExpr->getSourceRange();
 
   return new ArraySubscriptExpr(LHSExp, RHSExp, ResultType, RLoc);
 }
@@ -1017,7 +1017,7 @@
   const char *compStr = CompName.getName();
   if (strlen(compStr) > vecType->getNumElements()) {
     Diag(OpLoc, diag::err_ext_vector_component_exceeds_length)
-      << baseType.getAsString() << SourceRange(CompLoc);
+      << baseType << SourceRange(CompLoc);
     return QualType();
   }
 
@@ -1059,7 +1059,7 @@
     // We didn't get to the end of the string. This means a component accessor
     // exceeds the number of elements in the vector.
     Diag(OpLoc, diag::err_ext_vector_component_exceeds_length)
-      << baseType.getAsString() << SourceRange(CompLoc);
+      << baseType << SourceRange(CompLoc);
     return QualType();
   }
 
@@ -1068,7 +1068,7 @@
   // the elements.
   if (SpecialComponent && (vecType->getNumElements() & 1U)) {
     Diag(OpLoc, diag::err_ext_vector_component_requires_even)
-      << baseType.getAsString() << SourceRange(CompLoc);
+      << baseType << SourceRange(CompLoc);
     return QualType();
   }
   
@@ -1127,7 +1127,7 @@
       return BuildOverloadedArrowExpr(BaseExpr, OpLoc, MemberLoc, Member);
     else
       return Diag(MemberLoc, diag::err_typecheck_member_reference_arrow)
-        << BaseType.getAsString() << BaseExpr->getSourceRange();
+        << BaseType << BaseExpr->getSourceRange();
   }
   
   // Handle field access to simple records.  This also handles access to fields
@@ -1263,7 +1263,7 @@
   }
   
   return Diag(MemberLoc, diag::err_typecheck_member_reference_struct_union)
-          << BaseType.getAsString() << BaseExpr->getSourceRange();
+          << BaseType << BaseExpr->getSourceRange();
 }
 
 /// ActOnCallExpr - Handle a call to Fn with the specified array of arguments.
@@ -1347,7 +1347,7 @@
     const PointerType *PT = Fn->getType()->getAsPointerType();
     if (PT == 0)
       return Diag(LParenLoc, diag::err_typecheck_call_not_function)
-        << Fn->getType().getAsString() << Fn->getSourceRange();
+        << Fn->getType() << Fn->getSourceRange();
     FuncT = PT->getPointeeType()->getAsFunctionType();
   } else { // This is a block call.
     FuncT = Fn->getType()->getAsBlockPointerType()->getPointeeType()->
@@ -1355,7 +1355,7 @@
   }
   if (FuncT == 0)
     return Diag(LParenLoc, diag::err_typecheck_call_not_function)
-      << Fn->getType().getAsString() << Fn->getSourceRange();
+      << Fn->getType() << Fn->getSourceRange();
   
   // We know the result type of the call, set it.
   TheCall->setType(FuncT->getResultType().getNonReferenceType());
@@ -1499,17 +1499,17 @@
         (!castType->isStructureType() && !castType->isUnionType())) {
       // Reject any other conversions to non-scalar types.
       return Diag(TyR.getBegin(), diag::err_typecheck_cond_expect_scalar)
-        << castType.getAsString() << castExpr->getSourceRange();
+        << castType << castExpr->getSourceRange();
     }
       
     // accept this, but emit an ext-warn.
     Diag(TyR.getBegin(), diag::ext_typecheck_cast_nonscalar)
-      << castType.getAsString() << castExpr->getSourceRange();
+      << castType << castExpr->getSourceRange();
   } else if (!castExpr->getType()->isScalarType() && 
              !castExpr->getType()->isVectorType()) {
     return Diag(castExpr->getLocStart(),
                 diag::err_typecheck_expect_scalar_operand)
-      << castExpr->getType().getAsString() << castExpr->getSourceRange();
+      << castExpr->getType() << castExpr->getSourceRange();
   } else if (castExpr->getType()->isVectorType()) {
     if (CheckVectorCast(TyR, castExpr->getType(), castType))
       return true;
@@ -1529,11 +1529,11 @@
                   Ty->isVectorType() ? 
                   diag::err_invalid_conversion_between_vectors :
                   diag::err_invalid_conversion_between_vector_and_integer)
-        << VectorTy.getAsString() << Ty.getAsString() << R;
+        << VectorTy << Ty << R;
   } else
     return Diag(R.getBegin(),
                 diag::err_invalid_conversion_between_vector_and_scalar)
-      << VectorTy.getAsString() << Ty.getAsString() << R;
+      << VectorTy << Ty << R;
   
   return false;
 }
@@ -1564,8 +1564,7 @@
 
   // first, check the condition.
   if (!condT->isScalarType()) { // C99 6.5.15p2
-    Diag(cond->getLocStart(), diag::err_typecheck_cond_expect_scalar)
-      << condT.getAsString();
+    Diag(cond->getLocStart(), diag::err_typecheck_cond_expect_scalar) << condT;
     return QualType();
   }
   
@@ -1684,8 +1683,7 @@
       } else if (!Context.typesAreCompatible(lhptee.getUnqualifiedType(), 
                                              rhptee.getUnqualifiedType())) {
         Diag(questionLoc, diag::warn_typecheck_cond_incompatible_pointers)
-          << lexT.getAsString() << rexT.getAsString()
-          << lex->getSourceRange() << rex->getSourceRange();
+          << lexT << rexT << lex->getSourceRange() << rex->getSourceRange();
         // In this situation, we assume void* type. No especially good
         // reason, but this is what gcc does, and we do have to pick
         // to get a consistent AST.
@@ -1738,8 +1736,7 @@
 
   // Otherwise, the operands are not compatible.
   Diag(questionLoc, diag::err_typecheck_cond_incompatible_operands)
-    << lexT.getAsString() << rexT.getAsString()
-    << lex->getSourceRange() << rex->getSourceRange();
+    << lexT << rexT << lex->getSourceRange() << rex->getSourceRange();
   return QualType();
 }
 
@@ -2110,7 +2107,7 @@
 
   // You cannot convert between vector values of different size.
   Diag(Loc, diag::err_typecheck_vector_not_convertable)
-    << lex->getType().getAsString() << rex->getType().getAsString()
+    << lex->getType() << rex->getType()
     << lex->getSourceRange() << rex->getSourceRange();
   return QualType();
 }    
@@ -2168,7 +2165,7 @@
             << lex->getSourceRange() << rex->getSourceRange();
         } else {
           Diag(Loc, diag::err_typecheck_arithmetic_incomplete_type)
-            << lex->getType().getAsString() << lex->getSourceRange();
+            << lex->getType() << lex->getSourceRange();
           return QualType();
         }
       }
@@ -2205,7 +2202,7 @@
           << lex->getSourceRange() << rex->getSourceRange();
       } else {
         Diag(Loc, diag::err_typecheck_sub_ptr_object)
-          << lex->getType().getAsString() << lex->getSourceRange();
+          << lex->getType() << lex->getSourceRange();
         return QualType();
       }
     }
@@ -2227,7 +2224,7 @@
               << lex->getSourceRange() << rex->getSourceRange();
         } else {
           Diag(Loc, diag::err_typecheck_sub_ptr_object)
-            << rex->getType().getAsString() << rex->getSourceRange();
+            << rex->getType() << rex->getSourceRange();
           return QualType();
         }
       }
@@ -2237,7 +2234,7 @@
               Context.getCanonicalType(lpointee).getUnqualifiedType(), 
               Context.getCanonicalType(rpointee).getUnqualifiedType())) {
         Diag(Loc, diag::err_typecheck_sub_ptr_compatible)
-          << lex->getType().getAsString() << rex->getType().getAsString()
+          << lex->getType() << rex->getType()
           << lex->getSourceRange() << rex->getSourceRange();
         return QualType();
       }
@@ -2342,8 +2339,7 @@
                                     RCanPointeeTy.getUnqualifiedType()) &&
         !areComparableObjCInterfaces(LCanPointeeTy, RCanPointeeTy, Context)) {
       Diag(Loc, diag::ext_typecheck_comparison_of_distinct_pointers)
-        << lType.getAsString() << rType.getAsString()
-        << lex->getSourceRange() << rex->getSourceRange();
+        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
     }
     ImpCastExprToType(rex, lType); // promote the pointer to pointer
     return ResultTy;
@@ -2356,8 +2352,7 @@
     if (!LHSIsNull && !RHSIsNull &&
         !Context.typesAreBlockCompatible(lpointee, rpointee)) {
       Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks)
-        << lType.getAsString() << rType.getAsString()
-        << lex->getSourceRange() << rex->getSourceRange();
+        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
     }
     ImpCastExprToType(rex, lType); // promote the pointer to pointer
     return ResultTy;
@@ -2367,8 +2362,7 @@
       (lType->isPointerType() && rType->isBlockPointerType())) {
     if (!LHSIsNull && !RHSIsNull) {
       Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks)
-        << lType.getAsString() << rType.getAsString()
-        << lex->getSourceRange() << rex->getSourceRange();
+        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
     }
     ImpCastExprToType(rex, lType); // promote the pointer to pointer
     return ResultTy;
@@ -2386,8 +2380,7 @@
       if (!LPtrToVoid && !RPtrToVoid &&
           !Context.typesAreCompatible(lType, rType)) {
         Diag(Loc, diag::ext_typecheck_comparison_of_distinct_pointers)
-          << lType.getAsString() << rType.getAsString()
-          << lex->getSourceRange() << rex->getSourceRange();
+          << lType << rType << lex->getSourceRange() << rex->getSourceRange();
         ImpCastExprToType(rex, lType);
         return ResultTy;
       }
@@ -2410,8 +2403,7 @@
        rType->isIntegerType()) {
     if (!RHSIsNull)
       Diag(Loc, diag::ext_typecheck_comparison_of_pointer_integer)
-        << lType.getAsString() << rType.getAsString()
-        << lex->getSourceRange() << rex->getSourceRange();
+        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
     ImpCastExprToType(rex, lType); // promote the integer to pointer
     return ResultTy;
   }
@@ -2419,8 +2411,7 @@
       (rType->isPointerType() || rType->isObjCQualifiedIdType())) {
     if (!LHSIsNull)
       Diag(Loc, diag::ext_typecheck_comparison_of_pointer_integer)
-        << lType.getAsString() << rType.getAsString()
-        << lex->getSourceRange() << rex->getSourceRange();
+        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
     ImpCastExprToType(lex, rType); // promote the integer to pointer
     return ResultTy;
   }
@@ -2428,16 +2419,14 @@
   if (lType->isBlockPointerType() && rType->isIntegerType()) {
     if (!RHSIsNull)
       Diag(Loc, diag::ext_typecheck_comparison_of_pointer_integer)
-        << lType.getAsString() << rType.getAsString()
-        << lex->getSourceRange() << rex->getSourceRange();
+        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
     ImpCastExprToType(rex, lType); // promote the integer to pointer
     return ResultTy;
   }
   if (lType->isIntegerType() && rType->isBlockPointerType()) {
     if (!LHSIsNull)
       Diag(Loc, diag::ext_typecheck_comparison_of_pointer_integer)
-        << lType.getAsString() << rType.getAsString()
-        << lex->getSourceRange() << rex->getSourceRange();
+        << lType << rType << lex->getSourceRange() << rex->getSourceRange();
     ImpCastExprToType(lex, rType); // promote the integer to pointer
     return ResultTy;
   }
@@ -2563,7 +2552,7 @@
   }
 
   if (NeedType)
-    S.Diag(Loc, Diag) << E->getType().getAsString() << E->getSourceRange();
+    S.Diag(Loc, Diag) << E->getType() << E->getSourceRange();
   else
     S.Diag(Loc, Diag) << E->getSourceRange();
   return true;
@@ -2649,16 +2638,16 @@
       Diag(OpLoc, diag::ext_gnu_void_ptr) << Op->getSourceRange();
     } else {
       Diag(OpLoc, diag::err_typecheck_arithmetic_incomplete_type)
-        << ResType.getAsString() << Op->getSourceRange();
+        << ResType << Op->getSourceRange();
       return QualType();
     }
   } else if (ResType->isComplexType()) {
     // C99 does not support ++/-- on complex types, we allow as an extension.
     Diag(OpLoc, diag::ext_integer_increment_complex)
-      << ResType.getAsString() << Op->getSourceRange();
+      << ResType << Op->getSourceRange();
   } else {
     Diag(OpLoc, diag::err_typecheck_illegal_increment_decrement)
-      << ResType.getAsString() << Op->getSourceRange();
+      << ResType << Op->getSourceRange();
     return QualType();
   }
   // At this point, we know we have a real, complex or pointer type. 
@@ -3196,7 +3185,6 @@
     // build a built-in operation.    
   }
 
-
   QualType resultType;
   switch (Opc) {
   default:
@@ -3227,7 +3215,7 @@
       break;
 
     return Diag(OpLoc, diag::err_typecheck_unary_expr)
-          << resultType.getAsString();
+      << resultType << Input->getSourceRange();
   case UnaryOperator::Not: // bitwise complement
     UsualUnaryConversions(Input);
     resultType = Input->getType();
@@ -3235,10 +3223,10 @@
     if (resultType->isComplexType() || resultType->isComplexIntegerType())
       // C99 does not support '~' for complex conjugation.
       Diag(OpLoc, diag::ext_integer_complement_complex)
-        << resultType.getAsString() << Input->getSourceRange();
+        << resultType << Input->getSourceRange();
     else if (!resultType->isIntegerType())
       return Diag(OpLoc, diag::err_typecheck_unary_expr)
-        << resultType.getAsString() << Input->getSourceRange();
+        << resultType << Input->getSourceRange();
     break;
   case UnaryOperator::LNot: // logical negation
     // Unlike +/-/~, integer promotions aren't done here (C99 6.5.3.3p5).
@@ -3246,7 +3234,7 @@
     resultType = Input->getType();
     if (!resultType->isScalarType()) // C99 6.5.3.3p1
       return Diag(OpLoc, diag::err_typecheck_unary_expr)
-        << resultType.getAsString();
+        << resultType << Input->getSourceRange();
     // LNot always has type int. C99 6.5.3.3p5.
     resultType = Context.IntTy;
     break;
@@ -3323,7 +3311,7 @@
   // one is known to be a field designator.  Verify that the ArgTy represents
   // a struct/union/class.
   if (!ArgTy->isRecordType())
-    return Diag(TypeLoc, diag::err_offsetof_record_type) << ArgTy.getAsString();
+    return Diag(TypeLoc, diag::err_offsetof_record_type) << ArgTy;
   
   // Otherwise, create a compound literal expression as the base, and
   // iteratively process the offsetof designators.
@@ -3342,8 +3330,7 @@
       const ArrayType *AT = Context.getAsArrayType(Res->getType());
       if (!AT) {
         delete Res;
-        return Diag(OC.LocEnd, diag::err_offsetof_array_type)
-          << Res->getType().getAsString();
+        return Diag(OC.LocEnd, diag::err_offsetof_array_type) << Res->getType();
       }
       
       // FIXME: C++: Verify that operator[] isn't overloaded.
@@ -3361,8 +3348,7 @@
     const RecordType *RC = Res->getType()->getAsRecordType();
     if (!RC) {
       delete Res;
-      return Diag(OC.LocEnd, diag::err_offsetof_record_type)
-        << Res->getType().getAsString();
+      return Diag(OC.LocEnd, diag::err_offsetof_record_type) << Res->getType();
     }
       
     // Get the decl corresponding to this.
@@ -3632,7 +3618,7 @@
   if (CheckAssignmentConstraints(VaListType, E->getType()) != Compatible)
     return Diag(E->getLocStart(),
                 diag::err_first_argument_to_va_arg_not_of_type_va_list)
-      << E->getType().getAsString() << E->getSourceRange();
+      << E->getType() << E->getSourceRange();
   
   // FIXME: Warn if a non-POD type is passed in.
   
diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp
index f5f05f2..3633da8 100644
--- a/lib/Sema/SemaExprCXX.cpp
+++ b/lib/Sema/SemaExprCXX.cpp
@@ -126,7 +126,7 @@
     //
     if (!RT->getDecl()->isDefinition())
       return Diag(TyBeginLoc, diag::err_invalid_incomplete_type_use)
-        << Ty.getAsString() << FullRange;
+        << Ty << FullRange;
 
     unsigned DiagID = PP.getDiagnostics().getCustomDiagID(Diagnostic::Error,
                                     "class constructors are not supported yet");
@@ -164,7 +164,7 @@
     return Diag(TyBeginLoc, diag::err_value_init_for_array_type) << FullRange;
   if (Ty->isIncompleteType() && !Ty->isVoidType())
     return Diag(TyBeginLoc, diag::err_invalid_incomplete_type_use) 
-      << Ty.getAsString() << FullRange;
+      << Ty << FullRange;
 
   return new CXXZeroInitValueExpr(Ty, TyBeginLoc, RParenLoc);
 }
@@ -302,7 +302,7 @@
       assert(false && "Unexpected type class");
       return true;
     }
-    Diag(StartLoc, msg) << AllocType.getAsString() << TyR;
+    Diag(StartLoc, msg) << AllocType << TyR;
     return true;
   }
 
@@ -340,18 +340,17 @@
   }
 
   if (!Type->isPointerType()) {
-    Diag(StartLoc, diag::err_delete_operand)
-      << Type.getAsString() << Ex->getSourceRange();
+    Diag(StartLoc, diag::err_delete_operand) << Type << Ex->getSourceRange();
     return true;
   }
 
   QualType Pointee = Type->getAsPointerType()->getPointeeType();
   if (Pointee->isIncompleteType() && !Pointee->isVoidType())
     Diag(StartLoc, diag::warn_delete_incomplete)
-      << Pointee.getAsString() << Ex->getSourceRange();
+      << Pointee << Ex->getSourceRange();
   else if (!Pointee->isObjectType()) {
     Diag(StartLoc, diag::err_delete_operand)
-      << Type.getAsString() << Ex->getSourceRange();
+      << Type << Ex->getSourceRange();
     return true;
   }
 
@@ -428,7 +427,7 @@
     ConvTy = CheckSingleAssignmentConstraints(Context.BoolTy, CondExpr);
   if (ConvTy == Incompatible)
     return Diag(CondExpr->getLocStart(), diag::err_typecheck_bool_condition)
-      << Ty.getAsString() << CondExpr->getSourceRange();
+      << Ty << CondExpr->getSourceRange();
   return false;
 }
 
diff --git a/lib/Sema/SemaExprObjC.cpp b/lib/Sema/SemaExprObjC.cpp
index 094f3ec..4dadb65 100644
--- a/lib/Sema/SemaExprObjC.cpp
+++ b/lib/Sema/SemaExprObjC.cpp
@@ -388,7 +388,7 @@
         << Sel << SourceRange(lbrac, rbrac);
   } else {
     Diag(lbrac, diag::error_bad_receiver_type)
-      << RExpr->getType().getAsString() << RExpr->getSourceRange();
+      << RExpr->getType() << RExpr->getSourceRange();
     return true;
   }
   
diff --git a/lib/Sema/SemaInherit.cpp b/lib/Sema/SemaInherit.cpp
index 398f388..a02dd1e 100644
--- a/lib/Sema/SemaInherit.cpp
+++ b/lib/Sema/SemaInherit.cpp
@@ -205,7 +205,7 @@
   }
   
   Diag(Loc, diag::err_ambiguous_derived_to_base_conv)
-    << Derived.getAsString() << Base.getAsString() << PathDisplayStr << Range;
+    << Derived << Base << PathDisplayStr << Range;
   return true;
 }
 
diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp
index 1e26c84..42f9b14 100644
--- a/lib/Sema/SemaInit.cpp
+++ b/lib/Sema/SemaInit.cpp
@@ -144,7 +144,7 @@
     // This type is invalid, issue a diagnostic.
     Index++;
     SemaRef->Diag(IList->getLocStart(), diag::err_illegal_initializer_type)
-      << DeclType.getAsString();
+      << DeclType;
     hadError = true;
   } else {
     // In C, all types are either scalars or aggregates, but
diff --git a/lib/Sema/SemaNamedCast.cpp b/lib/Sema/SemaNamedCast.cpp
index c243fac..af1e2e0 100644
--- a/lib/Sema/SemaNamedCast.cpp
+++ b/lib/Sema/SemaNamedCast.cpp
@@ -109,8 +109,7 @@
     if (SrcExpr->isLvalue(Self.Context) != Expr::LV_Valid) {
       // Cannot cast non-lvalue to reference type.
       Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_rvalue)
-        << "const_cast" << OrigDestType.getAsString()
-        << SrcExpr->getSourceRange();
+        << "const_cast" << OrigDestType << SrcExpr->getSourceRange();
       return;
     }
 
@@ -131,7 +130,7 @@
     // was a reference type, we converted it to a pointer above.
     // C++ 5.2.11p3: For two pointer types [...]
     Self.Diag(OpRange.getBegin(), diag::err_bad_const_cast_dest)
-      << OrigDestType.getAsString() << DestRange;
+      << OrigDestType << DestRange;
     return;
   }
   if (DestType->isFunctionPointerType()) {
@@ -139,7 +138,7 @@
     // C++ 5.2.11p2: [...] where T is any object type or the void type [...]
     // T is the ultimate pointee of source and target type.
     Self.Diag(OpRange.getBegin(), diag::err_bad_const_cast_dest)
-      << OrigDestType.getAsString() << DestRange;
+      << OrigDestType << DestRange;
     return;
   }
   SrcType = Self.Context.getCanonicalType(SrcType);
@@ -171,8 +170,7 @@
     if (SrcTypeArr->getSize() != DestTypeArr->getSize()) {
       // Different array sizes.
       Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_generic)
-        << "const_cast" << OrigDestType.getAsString()
-        << OrigSrcType.getAsString() << OpRange;
+        << "const_cast" << OrigDestType << OrigSrcType << OpRange;
       return;
     }
     SrcType = SrcTypeArr->getElementType().getUnqualifiedType();
@@ -184,8 +182,7 @@
   if (SrcType != DestType) {
     // Cast between unrelated types.
     Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_generic)
-      << "const_cast" << OrigDestType.getAsString()
-      << OrigSrcType.getAsString() << OpRange;
+      << "const_cast" << OrigDestType << OrigSrcType << OpRange;
     return;
   }
 }
@@ -207,8 +204,7 @@
     if (SrcExpr->isLvalue(Self.Context) != Expr::LV_Valid) {
       // Cannot cast non-lvalue to reference type.
       Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_rvalue)
-        << "reinterpret_cast" << OrigDestType.getAsString()
-        << SrcExpr->getSourceRange();
+        << "reinterpret_cast" << OrigDestType << SrcExpr->getSourceRange();
       return;
     }
 
@@ -236,8 +232,7 @@
     // lvalue->reference, which is handled above, at least one of the two
     // arguments must be a pointer.
     Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_generic)
-      << "reinterpret_cast" << OrigDestType.getAsString()
-      << OrigSrcType.getAsString() << OpRange;
+      << "reinterpret_cast" << OrigDestType << OrigSrcType << OpRange;
     return;
   }
 
@@ -260,7 +255,7 @@
     if (Self.Context.getTypeSize(SrcType) >
         Self.Context.getTypeSize(DestType)) {
       Self.Diag(OpRange.getBegin(), diag::err_bad_reinterpret_cast_small_int)
-        << OrigDestType.getAsString() << DestRange;
+        << OrigDestType << DestRange;
     }
     return;
   }
@@ -276,16 +271,14 @@
     // With the valid non-pointer conversions out of the way, we can be even
     // more stringent.
     Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_generic)
-      << "reinterpret_cast" << OrigDestType.getAsString()
-      << OrigSrcType.getAsString() << OpRange;
+      << "reinterpret_cast" << OrigDestType << OrigSrcType << OpRange;
     return;
   }
 
   // C++ 5.2.10p2: The reinterpret_cast operator shall not cast away constness.
   if (CastsAwayConstness(Self, SrcType, DestType)) {
     Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_const_away)
-      << "reinterpret_cast" << OrigDestType.getAsString()
-      << OrigSrcType.getAsString() << OpRange;
+      << "reinterpret_cast" << OrigDestType << OrigSrcType << OpRange;
     return;
   }
 
@@ -467,8 +460,7 @@
           // to a const violation.
           if (!DestPointee.isAtLeastAsQualifiedAs(SrcPointee)) {
             Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_const_away)
-              << "static_cast" << DestType.getAsString()
-              << OrigSrcType.getAsString() << OpRange;
+              << "static_cast" << DestType << OrigSrcType << OpRange;
           }
           return;
         }
@@ -481,7 +473,7 @@
   // why every substep failed and, at the end, select the most specific and
   // report that.
   Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_generic)
-    << "static_cast" << DestType.getAsString() << OrigSrcType.getAsString()
+    << "static_cast" << DestType << OrigSrcType
     << OpRange;
 }
 
@@ -581,8 +573,7 @@
   // Must preserve cv, as always.
   if (!DestType.isAtLeastAsQualifiedAs(SrcType)) {
     Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_const_away)
-      << "static_cast" << OrigDestType.getAsString()
-      << OrigSrcType.getAsString() << OpRange;
+      << "static_cast" << OrigDestType << OrigSrcType << OpRange;
     return TSC_Failed;
   }
 
@@ -610,8 +601,7 @@
     }
 
     Self.Diag(OpRange.getBegin(), diag::err_ambiguous_base_to_derived_cast)
-      << SrcType.getUnqualifiedType().getAsString()
-      << DestType.getUnqualifiedType().getAsString()
+      << SrcType.getUnqualifiedType() << DestType.getUnqualifiedType()
       << PathDisplayStr << OpRange;
     return TSC_Failed;
   }
@@ -619,8 +609,7 @@
   if (Paths.getDetectedVirtual() != 0) {
     QualType VirtualBase(Paths.getDetectedVirtual(), 0);
     Self.Diag(OpRange.getBegin(), diag::err_static_downcast_via_virtual)
-      << OrigSrcType.getAsString() << OrigDestType.getAsString()
-      << VirtualBase.getAsString() << OpRange;
+      << OrigSrcType << OrigDestType << VirtualBase << OpRange;
     return TSC_Failed;
   }
 
@@ -680,7 +669,7 @@
     DestPointee = DestReference->getPointeeType();
   } else {
     Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_ref_or_ptr)
-      << OrigDestType.getAsString() << DestRange;
+      << OrigDestType << DestRange;
     return;
   }
 
@@ -690,12 +679,12 @@
   } else if (DestRecord) {
     if (!DestRecord->getDecl()->isDefinition()) {
       Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_incomplete)
-        << DestPointee.getUnqualifiedType().getAsString() << DestRange;
+        << DestPointee.getUnqualifiedType() << DestRange;
       return;
     }
   } else {
     Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class)
-      << DestPointee.getUnqualifiedType().getAsString() << DestRange;
+      << DestPointee.getUnqualifiedType() << DestRange;
     return;
   }
 
@@ -710,13 +699,13 @@
       SrcPointee = SrcPointer->getPointeeType();
     } else {
       Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_ptr)
-        << OrigSrcType.getAsString() << SrcExpr->getSourceRange();
+        << OrigSrcType << SrcExpr->getSourceRange();
       return;
     }
   } else {
     if (SrcExpr->isLvalue(Self.Context) != Expr::LV_Valid) {
       Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_rvalue)
-        << "dynamic_cast" << OrigDestType.getAsString() << OpRange;
+        << "dynamic_cast" << OrigDestType << OpRange;
     }
     SrcPointee = SrcType;
   }
@@ -725,14 +714,12 @@
   if (SrcRecord) {
     if (!SrcRecord->getDecl()->isDefinition()) {
       Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_incomplete)
-        << SrcPointee.getUnqualifiedType().getAsString()
-        << SrcExpr->getSourceRange();
+        << SrcPointee.getUnqualifiedType() << SrcExpr->getSourceRange();
       return;
     }
   } else {
     Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class)
-      << SrcPointee.getUnqualifiedType().getAsString()
-      << SrcExpr->getSourceRange();
+      << SrcPointee.getUnqualifiedType() << SrcExpr->getSourceRange();
     return;
   }
 
@@ -745,8 +732,7 @@
   // C++ 5.2.7p1: The dynamic_cast operator shall not cast away constness.
   if (!DestPointee.isAtLeastAsQualifiedAs(SrcPointee)) {
     Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_const_away)
-      << "dynamic_cast" << OrigDestType.getAsString()
-      << OrigSrcType.getAsString() << OpRange;
+      << "dynamic_cast" << OrigDestType << OrigSrcType << OpRange;
     return;
   }
 
@@ -760,7 +746,7 @@
   // Upcasts are resolved statically.
   if (DestRecord && Self.IsDerivedFrom(SrcPointee, DestPointee)) {
     Self.CheckDerivedToBaseConversion(SrcPointee, DestPointee,
-      OpRange.getBegin(), OpRange);
+                                      OpRange.getBegin(), OpRange);
     // Diagnostic already emitted on error.
     return;
   }
@@ -770,8 +756,7 @@
   assert(SrcDecl && "Definition missing");
   if (!cast<CXXRecordDecl>(SrcDecl)->isPolymorphic()) {
     Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_polymorphic)
-      << SrcPointee.getUnqualifiedType().getAsString()
-      << SrcExpr->getSourceRange();
+      << SrcPointee.getUnqualifiedType() << SrcExpr->getSourceRange();
   }
 
   // Done. Everything else is run-time checks.
diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp
index 976b4f7..3321ef1 100644
--- a/lib/Sema/SemaOverload.cpp
+++ b/lib/Sema/SemaOverload.cpp
@@ -1481,8 +1481,7 @@
   if (ICS.ConversionKind == ImplicitConversionSequence::BadConversion)
     return Diag(From->getSourceRange().getBegin(),
                 diag::err_implicit_object_parameter_init)
-       << ImplicitParamType.getAsString() << From->getType().getAsString()
-       << From->getSourceRange();
+       << ImplicitParamType << From->getType() << From->getSourceRange();
 
   if (ICS.Standard.Second == ICK_Derived_To_Base &&
       CheckDerivedToBaseConversion(From->getType(), ImplicitParamType,
@@ -2874,7 +2873,7 @@
         if (isReference) FnType = Context.getReferenceType(FnType);
 
         Diag(Cand->Surrogate->getLocation(), diag::err_ovl_surrogate_cand)
-          << FnType.getAsString();
+          << FnType;
       } else {
         // FIXME: We need to get the identifier in here
         // FIXME: Do we want the error message to point at the 
@@ -2885,8 +2884,7 @@
                                     Cand->Conversions.size(),
                                     false, 0);
 
-        Diag(SourceLocation(), diag::err_ovl_builtin_candidate)
-          << FnType.getAsString();
+        Diag(SourceLocation(), diag::err_ovl_builtin_candidate) << FnType;
       }
     }
   }
@@ -3052,7 +3050,7 @@
   case OR_No_Viable_Function:
     Diag(Object->getSourceRange().getBegin(), 
          diag::err_ovl_no_viable_object_call)
-      << Object->getType().getAsString() << (unsigned)CandidateSet.size()
+      << Object->getType() << (unsigned)CandidateSet.size()
       << Object->getSourceRange();
     PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/false);
     break;
@@ -3060,7 +3058,7 @@
   case OR_Ambiguous:
     Diag(Object->getSourceRange().getBegin(),
          diag::err_ovl_ambiguous_object_call)
-      << Object->getType().getAsString() << Object->getSourceRange();
+      << Object->getType() << Object->getSourceRange();
     PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/true);
     break;
   }    
@@ -3212,7 +3210,7 @@
   case OR_No_Viable_Function:
     if (CandidateSet.empty())
       Diag(OpLoc, diag::err_typecheck_member_reference_arrow)
-        << BasePtr->getType().getAsString() << BasePtr->getSourceRange();
+        << BasePtr->getType() << BasePtr->getSourceRange();
     else
       Diag(OpLoc, diag::err_ovl_no_viable_oper)
         << "operator->" << (unsigned)CandidateSet.size()
@@ -3222,8 +3220,7 @@
 
   case OR_Ambiguous:
     Diag(OpLoc,  diag::err_ovl_ambiguous_oper)
-      << "operator->"
-      << BasePtr->getSourceRange();
+      << "operator->" << BasePtr->getSourceRange();
     PrintOverloadCandidates(CandidateSet, /*OnlyViable=*/true);
     return true;
   }
diff --git a/lib/Sema/SemaStmt.cpp b/lib/Sema/SemaStmt.cpp
index 8cd223f..99fdbdb 100644
--- a/lib/Sema/SemaStmt.cpp
+++ b/lib/Sema/SemaStmt.cpp
@@ -223,7 +223,7 @@
       return true;
   } else if (!condType->isScalarType()) // C99 6.8.4.1p1
     return Diag(IfLoc, diag::err_typecheck_statement_requires_scalar)
-      << condType.getAsString() << condExpr->getSourceRange();
+      << condType << condExpr->getSourceRange();
 
   // Warn if the if block has a null body without an else value.
   // this helps prevent bugs due to typos, such as
@@ -362,7 +362,7 @@
   
   if (!CondType->isIntegerType()) { // C99 6.8.4.2p1
     Diag(SwitchLoc, diag::err_typecheck_statement_requires_integer)
-      << CondType.getAsString() << CondExpr->getSourceRange();
+      << CondType << CondExpr->getSourceRange();
     return true;
   }
   
@@ -549,7 +549,7 @@
       return true;
   } else if (!condType->isScalarType()) // C99 6.8.5p2
     return Diag(WhileLoc, diag::err_typecheck_statement_requires_scalar)
-      << condType.getAsString() << condExpr->getSourceRange();
+      << condType << condExpr->getSourceRange();
 
   return new WhileStmt(condExpr, (Stmt*)Body, WhileLoc);
 }
@@ -568,7 +568,7 @@
       return true;
   } else if (!condType->isScalarType()) // C99 6.8.5p2
     return Diag(DoLoc, diag::err_typecheck_statement_requires_scalar)
-      << condType.getAsString() << condExpr->getSourceRange();
+      << condType << condExpr->getSourceRange();
 
   return new DoStmt((Stmt*)Body, condExpr, DoLoc);
 }
@@ -607,7 +607,7 @@
         return true;
     } else if (!SecondType->isScalarType()) // C99 6.8.5p2
       return Diag(ForLoc, diag::err_typecheck_statement_requires_scalar)
-        << SecondType.getAsString() << Second->getSourceRange();
+        << SecondType << Second->getSourceRange();
   }
   return new ForStmt(First, Second, Third, Body, ForLoc);
 }
@@ -646,14 +646,14 @@
     }
     if (!Context.isObjCObjectPointerType(FirstType))
         Diag(ForLoc, diag::err_selector_element_type)
-          << FirstType.getAsString() << First->getSourceRange();
+          << FirstType << First->getSourceRange();
   }
   if (Second) {
     DefaultFunctionArrayConversion(Second);
     QualType SecondType = Second->getType();
     if (!Context.isObjCObjectPointerType(SecondType))
       Diag(ForLoc, diag::err_collection_expr_type)
-        << SecondType.getAsString() << Second->getSourceRange();
+        << SecondType << Second->getSourceRange();
   }
   return new ObjCForCollectionStmt(First, Second, Body, ForLoc, RParenLoc);
 }
@@ -888,7 +888,7 @@
       // FIXME: We currently leak memory here.
       return Diag(InputExpr->getSubExpr()->getLocStart(),
                   diag::err_asm_invalid_type_in_input)
-        << InputExpr->getType().getAsString() << InputConstraint
+        << InputExpr->getType() << InputConstraint
         << InputExpr->getSubExpr()->getSourceRange();
     }
   }
diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp
index 7000c3f..d878e46 100644
--- a/lib/Sema/SemaType.cpp
+++ b/lib/Sema/SemaType.cpp
@@ -204,13 +204,13 @@
         if (!EltTy->isIncompleteOrObjectType()) {
           Diag(DS.getRestrictSpecLoc(),
                diag::err_typecheck_invalid_restrict_invalid_pointee)
-            << EltTy.getAsString() << DS.getSourceRange();
+            << EltTy << DS.getSourceRange();
           TypeQuals &= ~QualType::Restrict; // Remove the restrict qualifier.
         }
       } else {
         Diag(DS.getRestrictSpecLoc(),
              diag::err_typecheck_invalid_restrict_not_pointer)
-          << Result.getAsString() << DS.getSourceRange();
+          << Result << DS.getSourceRange();
         TypeQuals &= ~QualType::Restrict; // Remove the restrict qualifier.
       }
     }
@@ -229,7 +229,7 @@
         Loc = DS.getVolatileSpecLoc();
       }
       Diag(Loc, diag::warn_typecheck_function_qualifiers)
-        << Result.getAsString() << DS.getSourceRange();
+        << Result << DS.getSourceRange();
     }
     
     // C++ [dcl.ref]p1:
@@ -286,7 +286,7 @@
       if ((DeclType.Ptr.TypeQuals & QualType::Restrict) &&
           !T->isIncompleteOrObjectType()) {
         Diag(DeclType.Loc, diag::err_typecheck_invalid_restrict_invalid_pointee)
-          << T.getAsString();
+          << T;
         DeclType.Ptr.TypeQuals &= QualType::Restrict;
       }        
         
@@ -327,7 +327,7 @@
       if (DeclType.Ref.HasRestrict &&
           !T->isIncompleteOrObjectType()) {
         Diag(DeclType.Loc, diag::err_typecheck_invalid_restrict_invalid_pointee)
-          << T.getAsString();
+          << T;
         DeclType.Ref.HasRestrict = false;
       }        
 
@@ -356,7 +356,7 @@
       // reject it (e.g. void ary[7], struct foo ary[7], void ary[7]())
       if (T->isIncompleteType()) { 
         Diag(D.getIdentifierLoc(), diag::err_illegal_decl_array_incomplete_type)
-          << T.getAsString();
+          << T;
         T = Context.IntTy;
         D.setInvalidType(true);
       } else if (T->isFunctionType()) {
@@ -374,20 +374,18 @@
         // If the element type is a struct or union that contains a variadic
         // array, reject it: C99 6.7.2.1p2.
         if (EltTy->getDecl()->hasFlexibleArrayMember()) {
-          Diag(DeclType.Loc, diag::err_flexible_array_in_array)
-            << T.getAsString();
+          Diag(DeclType.Loc, diag::err_flexible_array_in_array) << T;
           T = Context.IntTy;
           D.setInvalidType(true);
         }
       } else if (T->isObjCInterfaceType()) {
-        Diag(DeclType.Loc, diag::warn_objc_array_of_interfaces)
-        << T.getAsString();
+        Diag(DeclType.Loc, diag::warn_objc_array_of_interfaces) << T;
       }
       
       // C99 6.7.5.2p1: The size expression shall have integer type.
       if (ArraySize && !ArraySize->getType()->isIntegerType()) {
         Diag(ArraySize->getLocStart(), diag::err_array_size_non_int)
-          << ArraySize->getType().getAsString() << ArraySize->getSourceRange();
+          << ArraySize->getType() << ArraySize->getSourceRange();
         D.setInvalidType(true);
         delete ArraySize;
         ATI.NumElts = ArraySize = 0;
@@ -436,8 +434,7 @@
       
       // C99 6.7.5.3p1: The return type may not be a function or array type.
       if (T->isArrayType() || T->isFunctionType()) {
-        Diag(DeclType.Loc, diag::err_func_returning_array_function)
-          << T.getAsString();
+        Diag(DeclType.Loc, diag::err_func_returning_array_function) << T;
         T = Context.IntTy;
         D.setInvalidType(true);
       }
diff --git a/test/Parser/objc-forcollection-neg-2.m b/test/Parser/objc-forcollection-neg-2.m
index bde7d22..848df92 100644
--- a/test/Parser/objc-forcollection-neg-2.m
+++ b/test/Parser/objc-forcollection-neg-2.m
@@ -30,7 +30,7 @@
         for (id el in self) 
            ++i;
 	MyList<P> ***p;
-        for (p in self)  // expected-error {{selector element type ('MyList<P> ***') is not a valid object type}}
+        for (p in self)  // expected-error {{selector element type 'MyList<P> ***' is not a valid object type}}
            ++i;
 
 }
diff --git a/test/Parser/objc-forcollection-neg.m b/test/Parser/objc-forcollection-neg.m
index 8e1c05a..d67a714 100644
--- a/test/Parser/objc-forcollection-neg.m
+++ b/test/Parser/objc-forcollection-neg.m
@@ -24,13 +24,13 @@
 - (void)compilerTestAgainst {
 
         int i=0;
-        for (int * elem in elem) // expected-error {{selector element type ('int *') is not a valid object}} \
-				    expected-error {{collection expression type ('int *') is not a valid object}}
+        for (int * elem in elem) // expected-error {{selector element type 'int *' is not a valid object}} \
+				    expected-error {{collection expression type 'int *' is not a valid object}}
            ++i;
         for (i in elem)  // expected-error {{use of undeclared identifier 'elem'}} \
-			    expected-error {{selector element type ('int') is not a valid object}}
+			    expected-error {{selector element type 'int' is not a valid object}}
            ++i;
-        for (id se in i) // expected-error {{collection expression type ('int') is not a valid object}} 
+        for (id se in i) // expected-error {{collection expression type 'int' is not a valid object}} 
            ++i;
 }
 @end
diff --git a/test/Sema/compound-literal.c b/test/Sema/compound-literal.c
index 59e7bfa..c053a59 100644
--- a/test/Sema/compound-literal.c
+++ b/test/Sema/compound-literal.c
@@ -29,5 +29,5 @@
 void IncompleteFunc(unsigned x) {
   struct Incomplete* I2 = (struct foo[x]){1, 2, 3}; // -expected-error {{variable-sized object may not be initialized}}
   (void){1,2,3}; // -expected-error {{variable has incomplete type}}
-  (void(void)) { 0 }; // -expected-error{{illegal initializer type ('void (void)')}}
+  (void(void)) { 0 }; // -expected-error{{illegal initializer type 'void (void)'}}
 }
diff --git a/test/Sema/declspec.c b/test/Sema/declspec.c
index 1e84d65..6e29625 100644
--- a/test/Sema/declspec.c
+++ b/test/Sema/declspec.c
@@ -18,6 +18,6 @@
 typedef f* fptr;
 const f* v1;         // expected-warning {{qualifier on function type 'f' has unspecified behavior}}
 __restrict__ f* v2;  // expected-error {{restrict requires a pointer or reference ('f' is invalid)}}
-__restrict__ fptr v3; // expected-error {{pointer to function type ('f') may not be 'restrict' qualified}}
-f *__restrict__ v4;   // expected-error {{pointer to function type ('f') may not be 'restrict' qualified}}
+__restrict__ fptr v3; // expected-error {{pointer to function type 'f' may not be 'restrict' qualified}}
+f *__restrict__ v4;   // expected-error {{pointer to function type 'f' may not be 'restrict' qualified}}
 
diff --git a/test/Sema/typecheck-binop.c b/test/Sema/typecheck-binop.c
index 8367565..7977e7e 100644
--- a/test/Sema/typecheck-binop.c
+++ b/test/Sema/typecheck-binop.c
@@ -7,7 +7,7 @@
 }
 
 void *sub2(struct incomplete *P) {
-  return P-4;      /* expected-error{{not a complete object type}} */
+  return P-4;      /* expected-error{{subtraction of pointer 'struct incomplete *' requires pointee to be a complete object type}} */
 }
 
 void *sub3(void *P) {
diff --git a/test/SemaCXX/dynamic-cast.cpp b/test/SemaCXX/dynamic-cast.cpp
index 5e47b9a..8b0b748 100644
--- a/test/SemaCXX/dynamic-cast.cpp
+++ b/test/SemaCXX/dynamic-cast.cpp
@@ -34,9 +34,9 @@
   // noncls -> ref
   (void)dynamic_cast<A&>(*((int*)0)); // expected-error {{'int' is not a class}}
   // ptr -> incomplete
-  (void)dynamic_cast<Incomplete*>((A*)0); // expected-error {{'struct Incomplete' is incomplete}}
+  (void)dynamic_cast<Incomplete*>((A*)0); // expected-error {{'struct Incomplete' is an incomplete type}}
   // incomplete -> ptr
-  (void)dynamic_cast<A*>((Incomplete*)0); // expected-error {{'struct Incomplete' is incomplete}}
+  (void)dynamic_cast<A*>((Incomplete*)0); // expected-error {{'struct Incomplete' is an incomplete type}}
 }
 
 void same()
diff --git a/test/SemaObjC/foreach-1.m b/test/SemaObjC/foreach-1.m
index 17c0379..9de3294 100644
--- a/test/SemaObjC/foreach-1.m
+++ b/test/SemaObjC/foreach-1.m
@@ -4,7 +4,7 @@
 
 void f(NSArray *a)
 {
-    for (int i in a); // expected-error{{selector element type ('int') is not a valid object}}
+    for (int i in a); // expected-error{{selector element type 'int' is not a valid object}}
     for ((id)2 in a); // expected-error{{selector element is not a valid lvalue}}
     for (2 in a); // expected-error{{selector element is not a valid lvalue}}
-}
\ No newline at end of file
+}
