diff --git a/include/clang/Analysis/PathSensitive/BugReporter.h b/include/clang/Analysis/PathSensitive/BugReporter.h
index 870e9d3..d9969ef 100644
--- a/include/clang/Analysis/PathSensitive/BugReporter.h
+++ b/include/clang/Analysis/PathSensitive/BugReporter.h
@@ -325,13 +325,15 @@
         R.addString(Info.getArgCStr(i));
         break;
       case DiagnosticInfo::ak_sint:
-        // FIXME: Optimize
         R.addString(llvm::itostr(Info.getArgSInt(i)));
         break;
       case DiagnosticInfo::ak_uint:
-        // FIXME: Optimize
         R.addString(llvm::utostr_32(Info.getArgUInt(i)));
         break;
+      case DiagnosticInfo::ak_identifierinfo:
+        R.addString(Info.getArgIdentifier(i)->getName());
+        break;
+          
       }
     }
   }
diff --git a/include/clang/Basic/Diagnostic.h b/include/clang/Basic/Diagnostic.h
index fe3cfee..0b68a2e 100644
--- a/include/clang/Basic/Diagnostic.h
+++ b/include/clang/Basic/Diagnostic.h
@@ -27,6 +27,7 @@
   class SourceRange;
   class SourceManager;
   class DiagnosticInfo;
+  class IdentifierInfo;
   
   // Import the diagnostic enums themselves.
   namespace diag {
@@ -237,10 +238,11 @@
   void operator=(const DiagnosticInfo&); // DO NOT IMPLEMENT
 public:
   enum ArgumentKind {
-    ak_std_string,   // std::string
-    ak_c_string,     // const char *
-    ak_sint,         // int
-    ak_uint          // unsigned
+    ak_std_string,     // std::string
+    ak_c_string,       // const char *
+    ak_sint,           // int
+    ak_uint,           // unsigned
+    ak_identifierinfo  // IdentifierInfo
   };
   
   
@@ -316,6 +318,13 @@
     return (unsigned)DiagObj->DiagArgumentsVal[Idx];
   }
   
+  /// getArgIdentifier - Return the specified IdentifierInfo argument.
+  const IdentifierInfo *getArgIdentifier(unsigned Idx) const {
+    assert(getArgKind(Idx) == ak_identifierinfo &&"invalid argument accessor!");
+    return reinterpret_cast<const IdentifierInfo*>(
+                                                DiagObj->DiagArgumentsVal[Idx]);
+  }
+  
   /// getNumRanges - Return the number of source ranges associated with this
   /// diagnostic.
   unsigned getNumRanges() const {
@@ -360,6 +369,17 @@
     return *this;
   }
   
+  DiagnosticInfo &operator<<(const IdentifierInfo *II) {
+    assert((unsigned)DiagObj->NumDiagArgs < Diagnostic::MaxArguments &&
+           "Too many arguments to diagnostic!");
+    DiagObj->DiagArgumentsKind[DiagObj->NumDiagArgs] = ak_identifierinfo;
+    DiagObj->DiagArgumentsVal[DiagObj->NumDiagArgs++] =
+    reinterpret_cast<intptr_t>(II);
+    return *this;
+  }
+  
+  
+  
   
   DiagnosticInfo &operator<<(const SourceRange &R) {
     assert((unsigned)DiagObj->NumDiagArgs < 
diff --git a/lib/Basic/Diagnostic.cpp b/lib/Basic/Diagnostic.cpp
index 9428b21..a25a790 100644
--- a/lib/Basic/Diagnostic.cpp
+++ b/lib/Basic/Diagnostic.cpp
@@ -12,6 +12,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "clang/Basic/Diagnostic.h"
+#include "clang/Basic/IdentifierTable.h"
 #include "clang/Basic/SourceLocation.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringExtras.h"
@@ -292,6 +293,11 @@
         OutStr.append(S.begin(), S.end());
         break;
       }
+      case DiagnosticInfo::ak_identifierinfo: {
+        const IdentifierInfo *II = getArgIdentifier(StrNo);
+        OutStr.append(II->getName(), II->getName() + II->getLength());
+        break;
+      }
       }
       DiagStr += 2;
     }
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index 90d3730..b62aa9a 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -234,7 +234,7 @@
       if (Param->getIdentifier())
         Diag(Param->getLocation(), 
              diag::err_param_default_argument_missing_name)
-          << Param->getIdentifier()->getName();
+          << Param->getIdentifier();
       else
         Diag(Param->getLocation(), 
              diag::err_param_default_argument_missing);
