diff --git a/lib/Frontend/SerializedDiagnosticPrinter.cpp b/lib/Frontend/SerializedDiagnosticPrinter.cpp
index 4a7c8cf60cfff45bfbca32d301b47e3f3d5fc7ef..fba085eeaa98215b53fbfa79e2a18111dd9bf798 100644
--- a/lib/Frontend/SerializedDiagnosticPrinter.cpp
+++ b/lib/Frontend/SerializedDiagnosticPrinter.cpp
@@ -245,7 +245,9 @@ void SDiagsWriter::EmitBlockInfoBlock() {
                                                           Abbrev));
   
   Abbrev = new BitCodeAbbrev();
-  Abbrev->Add(BitCodeAbbrevOp(RECORD_CATEGORY));
+  Abbrev->Add(BitCodeAbbrevOp(RECORD_FILENAME));
+  Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 64)); // Size.
+  Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 64)); // Modifcation time.  
   Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 16)); // Text size.
   Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // File name text.
   Abbrevs.set(RECORD_FILENAME, Stream.EmitBlockInfoAbbrev(BLOCK_STRINGS,
@@ -338,6 +340,8 @@ void SDiagsWriter::EmitCategoriesAndFileNames() {
       StringRef Name = FE->getName();
       
       Record.clear();
+      Record.push_back(FE->getSize());
+      Record.push_back(FE->getModificationTime());
       Record.push_back(Name.size());
       Stream.EmitRecordWithBlob(Abbrevs.get(RECORD_FILENAME), Record, Name);
     }