Give SourceManager a Diagnostic object with which to report errors,
and start simplifying the interfaces in SourceManager that can fail.

llvm-svn: 98594
diff --git a/clang/lib/Basic/SourceManager.cpp b/clang/lib/Basic/SourceManager.cpp
index b69ba53..ac2fe3d 100644
--- a/clang/lib/Basic/SourceManager.cpp
+++ b/clang/lib/Basic/SourceManager.cpp
@@ -21,6 +21,7 @@
 #include "llvm/System/Path.h"
 #include <algorithm>
 #include <string>
+#include <cstring>
 #include <cstdio>
 
 using namespace clang;
@@ -532,19 +533,17 @@
 }
 
 std::pair<const char*, const char*>
-SourceManager::getBufferData(FileID FID, llvm::StringRef &FileName,
-                             std::string &Error) const {
-  const llvm::MemoryBuffer *Buf = getBuffer(FID).getBuffer(FileName, Error);
-  if (!Error.empty())
-    return std::make_pair((const char *)0, (const char *)0);
-  return std::make_pair(Buf->getBufferStart(), Buf->getBufferEnd());
-}
-
-std::pair<const char*, const char*>
-SourceManager::getBufferData(FileID FID, Diagnostic &Diags) const {
-  const llvm::MemoryBuffer *Buf = getBuffer(FID).getBuffer(Diags);
-  if (!Buf)
-    return std::make_pair((const char *)0, (const char *)0);
+SourceManager::getBufferData(FileID FID, bool *Invalid) const {
+  if (Invalid)
+    *Invalid = false;
+  
+  const llvm::MemoryBuffer *Buf = getBuffer(FID).getBuffer(Diag);
+  if (!Buf) {
+    if (*Invalid)
+      *Invalid = true;
+    const char *FakeText = "";
+    return std::make_pair(FakeText, FakeText + strlen(FakeText));
+  }
   return std::make_pair(Buf->getBufferStart(), Buf->getBufferEnd());
 }