diff --git a/include/clang/Basic/FileManager.h b/include/clang/Basic/FileManager.h
index 5a143e9..12e9e3f 100644
--- a/include/clang/Basic/FileManager.h
+++ b/include/clang/Basic/FileManager.h
@@ -171,7 +171,7 @@
   // Caching.
   llvm::OwningPtr<StatSysCallCache> StatCache;
 
-  int stat_cached(const char* path, struct stat* buf);
+  int stat_cached(const char *path, struct stat *buf);
 
 public:
   FileManager(const FileSystemOptions &FileSystemOpts);
@@ -212,12 +212,9 @@
   /// \brief Open the specified file as a MemoryBuffer, returning a new
   /// MemoryBuffer if successful, otherwise returning null.
   llvm::MemoryBuffer *getBufferForFile(const FileEntry *Entry,
-                                       std::string *ErrorStr = 0) {
-    return getBufferForFile(Entry->getName(), ErrorStr, Entry->getSize());
-  }
+                                       std::string *ErrorStr = 0);
   llvm::MemoryBuffer *getBufferForFile(llvm::StringRef Filename,
-                                       std::string *ErrorStr = 0,
-                                       int64_t FileSize = -1);
+                                       std::string *ErrorStr = 0);
 
   /// \brief If path is not absolute and FileSystemOptions set the working
   /// directory, the path is modified to be relative to the given
diff --git a/include/clang/Frontend/ASTUnit.h b/include/clang/Frontend/ASTUnit.h
index b6398f7..6d584d4 100644
--- a/include/clang/Frontend/ASTUnit.h
+++ b/include/clang/Frontend/ASTUnit.h
@@ -462,8 +462,7 @@
   }
 
   llvm::MemoryBuffer *getBufferForFile(llvm::StringRef Filename,
-                                       std::string *ErrorStr = 0,
-                                       int64_t FileSize = -1);
+                                       std::string *ErrorStr = 0);
 
   /// \brief Whether this AST represents a complete translation unit.
   ///
diff --git a/lib/Basic/FileManager.cpp b/lib/Basic/FileManager.cpp
index 36b5385..9066359 100644
--- a/lib/Basic/FileManager.cpp
+++ b/lib/Basic/FileManager.cpp
@@ -307,7 +307,7 @@
   struct stat StatBuf;
   //llvm::errs() << "STATING: " << Filename;
   if (stat_cached(InterndFileName, &StatBuf) ||   // Error stat'ing.
-        S_ISDIR(StatBuf.st_mode)) {           // A directory?
+      S_ISDIR(StatBuf.st_mode)) {                 // A directory?
     // If this file doesn't exist, we leave a null in FileEntries for this path.
     //llvm::errs() << ": Not existing\n";
     return 0;
@@ -389,17 +389,25 @@
   path = NewPath;
 }
 
-
-
 llvm::MemoryBuffer *FileManager::
-getBufferForFile(llvm::StringRef Filename,
-                 std::string *ErrorStr, int64_t FileSize) {
+getBufferForFile(const FileEntry *Entry, std::string *ErrorStr) {
+  llvm::StringRef Filename = Entry->getName();
   if (FileSystemOpts.WorkingDir.empty())
-    return llvm::MemoryBuffer::getFile(Filename, ErrorStr, FileSize);
+    return llvm::MemoryBuffer::getFile(Filename, ErrorStr);
   
   llvm::sys::Path FilePath(Filename);
   FixupRelativePath(FilePath, FileSystemOpts);
-  return llvm::MemoryBuffer::getFile(FilePath.c_str(), ErrorStr, FileSize);
+  return llvm::MemoryBuffer::getFile(FilePath.c_str(), ErrorStr);
+}
+
+llvm::MemoryBuffer *FileManager::
+getBufferForFile(llvm::StringRef Filename, std::string *ErrorStr) {
+  if (FileSystemOpts.WorkingDir.empty())
+    return llvm::MemoryBuffer::getFile(Filename, ErrorStr);
+  
+  llvm::sys::Path FilePath(Filename);
+  FixupRelativePath(FilePath, FileSystemOpts);
+  return llvm::MemoryBuffer::getFile(FilePath.c_str(), ErrorStr);
 }
 
 int FileManager::stat_cached(const char *path, struct stat *buf) {
diff --git a/lib/Frontend/ASTUnit.cpp b/lib/Frontend/ASTUnit.cpp
index 34d2fec..b55001e 100644
--- a/lib/Frontend/ASTUnit.cpp
+++ b/lib/Frontend/ASTUnit.cpp
@@ -456,10 +456,9 @@
 }
 
 llvm::MemoryBuffer *ASTUnit::getBufferForFile(llvm::StringRef Filename,
-                                              std::string *ErrorStr,
-                                              int64_t FileSize) {
+                                              std::string *ErrorStr) {
   assert(FileMgr);
-  return FileMgr->getBufferForFile(Filename, ErrorStr, FileSize);
+  return FileMgr->getBufferForFile(Filename, ErrorStr);
 }
 
 /// \brief Configure the diagnostics object for use with ASTUnit.
diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp
index 9673081..81907d0 100644
--- a/lib/Serialization/ASTReader.cpp
+++ b/lib/Serialization/ASTReader.cpp
@@ -1262,9 +1262,8 @@
       return Failure;
     }
 
-    FileID FID = SourceMgr.createFileID(File,
-                                       ReadSourceLocation(*F, Record[1]),
-                                       (SrcMgr::CharacteristicKind)Record[2],
+    FileID FID = SourceMgr.createFileID(File, ReadSourceLocation(*F, Record[1]),
+                                        (SrcMgr::CharacteristicKind)Record[2],
                                         ID, Record[0]);
     if (Record[3])
       const_cast<SrcMgr::FileInfo&>(SourceMgr.getSLocEntry(FID).getFile())
