diff --git a/include/clang/Analysis/PathSensitive/BugReporter.h b/include/clang/Analysis/PathSensitive/BugReporter.h
index cc3011f..945cca3 100644
--- a/include/clang/Analysis/PathSensitive/BugReporter.h
+++ b/include/clang/Analysis/PathSensitive/BugReporter.h
@@ -337,8 +337,8 @@
         break;
       case Diagnostic::ak_qualtype: {
         llvm::SmallString<64> Str;
-        Info.getDiags()->ConvertQualTypeToString(Info.getRawArg(i), 0, 0, 0, 0,
-                                                 Str);
+        Info.getDiags()->ConvertArgToString(Info.getArgKind(i),
+                                            Info.getRawArg(i), 0, 0, 0, 0, Str);
         R.addString(std::string(Str.begin(), Str.end()));
         break;
       }
diff --git a/include/clang/Basic/Diagnostic.h b/include/clang/Basic/Diagnostic.h
index 981a559..144095f 100644
--- a/include/clang/Basic/Diagnostic.h
+++ b/include/clang/Basic/Diagnostic.h
@@ -62,6 +62,15 @@
     Ignored, Note, Warning, Error
   };
   
+  enum ArgumentKind {
+    ak_std_string,     // std::string
+    ak_c_string,       // const char *
+    ak_sint,           // int
+    ak_uint,           // unsigned
+    ak_identifierinfo, // IdentifierInfo
+    ak_qualtype        // QualType
+  };
+  
 private:  
   bool IgnoreAllWarnings;     // Ignore all warnings: -w
   bool WarningsAsErrors;      // Treat warnings like errors: 
@@ -84,12 +93,15 @@
   /// CustomDiagInfo - Information for uniquing and looking up custom diags.
   diag::CustomDiagInfo *CustomDiagInfo;
 
-  /// QualTypeToString - A function pointer that converts QualType's to strings.
+  /// ArgToStringFn - A function pointer that converts an opaque diagnostic
+  /// argument to a strings.  This takes the modifiers and argument that was
+  /// present in the diagnostic.
   /// This is a hack to avoid a layering violation between libbasic and libsema.
-  typedef void (*QTToStringFnTy)(intptr_t QT, const char *Modifier, unsigned ML,
-                                 const char *Argument, unsigned ArgLen,
-                                 llvm::SmallVectorImpl<char> &Output);
-  QTToStringFnTy QualTypeToString;
+  typedef void (*ArgToStringFnTy)(ArgumentKind Kind, intptr_t Val,
+                                  const char *Modifier, unsigned ModifierLen,
+                                  const char *Argument, unsigned ArgumentLen,
+                                  llvm::SmallVectorImpl<char> &Output);
+  ArgToStringFnTy ArgToStringFn;
 public:
   explicit Diagnostic(DiagnosticClient *client = 0);
   ~Diagnostic();
@@ -157,16 +169,17 @@
   unsigned getCustomDiagID(Level L, const char *Message);
   
   
-  /// ConvertQualTypeToString - This method converts a QualType (as an intptr_t)
-  /// into the string that represents it if possible.
-  void ConvertQualTypeToString(intptr_t QT, const char *Modifier, unsigned ML,
-                               const char *Argument, unsigned ArgLen,
-                               llvm::SmallVectorImpl<char> &Output) const {
-    QualTypeToString(QT, Modifier, ML, Argument, ArgLen, Output);
+  /// ConvertArgToString - This method converts a diagnostic argument (as an
+  /// intptr_t) into the string that represents it.
+  void ConvertArgToString(ArgumentKind Kind, intptr_t Val,
+                          const char *Modifier, unsigned ModLen,
+                          const char *Argument, unsigned ArgLen,
+                          llvm::SmallVectorImpl<char> &Output) const {
+    ArgToStringFn(Kind, Val, Modifier, ModLen, Argument, ArgLen, Output);
   }
   
-  void SetQualTypeToStringFn(QTToStringFnTy Fn) {
-    QualTypeToString = Fn;
+  void SetArgToStringFn(ArgToStringFnTy Fn) {
+    ArgToStringFn = Fn;
   }
   
   //===--------------------------------------------------------------------===//
@@ -246,15 +259,6 @@
   /// ProcessDiag - This is the method used to report a diagnostic that is
   /// finally fully formed.
   void ProcessDiag();
-public:
-  enum ArgumentKind {
-    ak_std_string,     // std::string
-    ak_c_string,       // const char *
-    ak_sint,           // int
-    ak_uint,           // unsigned
-    ak_identifierinfo, // IdentifierInfo
-    ak_qualtype        // QualType
-  };
 };
 
 //===----------------------------------------------------------------------===//
diff --git a/lib/Basic/Diagnostic.cpp b/lib/Basic/Diagnostic.cpp
index 8a897f5..fd65f75 100644
--- a/lib/Basic/Diagnostic.cpp
+++ b/lib/Basic/Diagnostic.cpp
@@ -116,10 +116,11 @@
 // Common Diagnostic implementation
 //===----------------------------------------------------------------------===//
 
-static void DummyQTToStringFnTy(intptr_t QT, const char *Modifier, unsigned ML,
-                                const char *Argument, unsigned ArgLen,
-                                llvm::SmallVectorImpl<char> &Output) {
-  const char *Str = "<can't format QualType>";
+static void DummyArgToStringFn(Diagnostic::ArgumentKind AK, intptr_t QT,
+                               const char *Modifier, unsigned ML,
+                               const char *Argument, unsigned ArgLen,
+                               llvm::SmallVectorImpl<char> &Output) {
+  const char *Str = "<can't format argument>";
   Output.append(Str, Str+strlen(Str));
 }
 
@@ -139,7 +140,7 @@
   CustomDiagInfo = 0;
   CurDiagID = ~0U;
   
-  QualTypeToString = DummyQTToStringFnTy;
+  ArgToStringFn = DummyArgToStringFn;
 }
 
 Diagnostic::~Diagnostic() {
@@ -536,9 +537,9 @@
     }
     case Diagnostic::ak_qualtype:
       OutStr.push_back('\'');
-      getDiags()->ConvertQualTypeToString(getRawArg(ArgNo),
-                                          Modifier, ModifierLen,
-                                          Argument, ArgumentLen, OutStr);
+      getDiags()->ConvertArgToString(getArgKind(ArgNo), getRawArg(ArgNo),
+                                     Modifier, ModifierLen,
+                                     Argument, ArgumentLen, OutStr);
       OutStr.push_back('\'');
       break;
     }
diff --git a/lib/Sema/Sema.cpp b/lib/Sema/Sema.cpp
index d43eadd..b01b5d7 100644
--- a/lib/Sema/Sema.cpp
+++ b/lib/Sema/Sema.cpp
@@ -22,12 +22,13 @@
 
 /// ConvertQualTypeToStringFn - This function is used to pretty print the 
 /// specified QualType as a string in diagnostics.
-static void ConvertQualTypeToStringFn(intptr_t QT,
+static void ConvertArgToStringFn(Diagnostic::ArgumentKind Kind, intptr_t QT,
                                       const char *Modifier, unsigned ML,
                                       const char *Argument, unsigned ArgLen,
                                       llvm::SmallVectorImpl<char> &Output) {
   assert(ML == 0 && ArgLen == 0 && "Invalid modifier for QualType argument");
-
+  assert(Kind == Diagnostic::ak_qualtype);
+  
   QualType Ty(QualType::getFromOpaquePtr(reinterpret_cast<void*>(QT)));
   
   // FIXME: Playing with std::string is really slow.
@@ -126,7 +127,7 @@
     FieldCollector.reset(new CXXFieldCollector());
       
   // Tell diagnostics how to render things from the AST library.
-  PP.getDiagnostics().SetQualTypeToStringFn(ConvertQualTypeToStringFn);
+  PP.getDiagnostics().SetArgToStringFn(ConvertArgToStringFn);
 }
 
 /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit cast. 
