diff --git a/lib/Basic/SourceManager.cpp b/lib/Basic/SourceManager.cpp
index 02568d3..54aed7c 100644
--- a/lib/Basic/SourceManager.cpp
+++ b/lib/Basic/SourceManager.cpp
@@ -24,9 +24,9 @@
 using namespace SrcMgr;
 using llvm::MemoryBuffer;
 
-//===--------------------------------------------------------------------===//
+//===----------------------------------------------------------------------===//
 // SourceManager Helper Classes
-//===--------------------------------------------------------------------===//
+//===----------------------------------------------------------------------===//
 
 ContentCache::~ContentCache() {
   delete Buffer;
@@ -57,11 +57,30 @@
   return Buffer;
 }
 
-//===--------------------------------------------------------------------===//
+//===----------------------------------------------------------------------===//
 // Line Table Implementation
-//===--------------------------------------------------------------------===//
+//===----------------------------------------------------------------------===//
 
 namespace clang {
+struct LineEntry {
+  /// FileOffset - The offset in this file that the line entry occurs at.
+  unsigned FileOffset;
+  /// LineNo - The presumed line number of this line entry: #line 4.
+  unsigned LineNo;
+  /// FilenameID - The ID of the filename identified by this line entry:
+  /// #line 4 "foo.c".  This is -1 if not specified.
+  int FilenameID;
+  
+  static LineEntry get(unsigned Offs, unsigned Line, int Filename) {
+    LineEntry E;
+    E.FileOffset = Offs;
+    E.LineNo = Line;
+    E.FilenameID = Filename;
+    return E;
+  }
+};
+  
+  
 /// LineTableInfo - This class is used to hold and unique data used to
 /// represent #line information.
 class LineTableInfo {
@@ -72,6 +91,10 @@
   /// to string.
   llvm::StringMap<unsigned, llvm::BumpPtrAllocator> FilenameIDs;
   std::vector<llvm::StringMapEntry<unsigned>*> FilenamesByID;
+  
+  /// LineEntries - This is a map from FileIDs to a list of line entries (sorted
+  /// by the offset they occur in the file.
+  std::map<unsigned, std::vector<LineEntry> > LineEntries;
 public:
   LineTableInfo() {
   }
@@ -84,7 +107,7 @@
   ~LineTableInfo() {}
   
   unsigned getLineTableFilenameID(const char *Ptr, unsigned Len);
-  void AddLineNote(FileID FID, unsigned Offset,
+  void AddLineNote(unsigned FID, unsigned Offset,
                    unsigned LineNo, int FilenameID);
 };
 } // namespace clang
@@ -109,9 +132,13 @@
 /// AddLineNote - Add a line note to the line table that indicates that there
 /// is a #line at the specified FID/Offset location which changes the presumed
 /// location to LineNo/FilenameID.
-void LineTableInfo::AddLineNote(FileID FID, unsigned Offset,
+void LineTableInfo::AddLineNote(unsigned FID, unsigned Offset,
                                 unsigned LineNo, int FilenameID) {
+  std::vector<LineEntry> &Entries = LineEntries[FID];
   
+  assert((Entries.empty() || Entries.back().FileOffset < Offset) &&
+         "Adding line entries out of order!");
+  Entries.push_back(LineEntry::get(Offset, LineNo, FilenameID));
 }
 
 
@@ -139,13 +166,13 @@
   
   if (LineTable == 0)
     LineTable = new LineTableInfo();
-  LineTable->AddLineNote(LocInfo.first, LocInfo.second, LineNo, FilenameID);
+  LineTable->AddLineNote(LocInfo.first.ID, LocInfo.second, LineNo, FilenameID);
 }
 
 
-//===--------------------------------------------------------------------===//
+//===----------------------------------------------------------------------===//
 // Private 'Create' methods.
-//===--------------------------------------------------------------------===//
+//===----------------------------------------------------------------------===//
 
 SourceManager::~SourceManager() {
   delete LineTable;
@@ -261,9 +288,9 @@
 }
 
 
-//===--------------------------------------------------------------------===//
+//===----------------------------------------------------------------------===//
 // SourceLocation manipulation methods.
-//===--------------------------------------------------------------------===//
+//===----------------------------------------------------------------------===//
 
 /// getFileIDSlow - Return the FileID for a SourceLocation.  This is a very hot
 /// method that is used for all SourceManager queries that start with a
@@ -755,7 +782,7 @@
 }
 
 SourceManager*
-SourceManager::CreateAndRegister(llvm::Deserializer& D, FileManager& FMgr){
+SourceManager::CreateAndRegister(llvm::Deserializer &D, FileManager &FMgr) {
   SourceManager *M = new SourceManager();
   D.RegisterPtr(M);
   
