diff --git a/tools/CIndex/CIndex.cpp b/tools/CIndex/CIndex.cpp
index fee5b74..03519ad 100644
--- a/tools/CIndex/CIndex.cpp
+++ b/tools/CIndex/CIndex.cpp
@@ -1108,24 +1108,11 @@
   return Result;
 }
 
-void clang_getInstantiationLocation(CXSourceLocation location,
-                                    CXFile *file,
-                                    unsigned *line,
-                                    unsigned *column) {
+static SourceLocation getAdjustedSourceLocation(CXSourceLocation location) {
   cxloc::CXSourceLocationPtr Ptr
     = cxloc::CXSourceLocationPtr::getFromOpaqueValue(location.ptr_data);
   SourceLocation Loc = SourceLocation::getFromRawEncoding(location.int_data);
 
-  if (!Ptr.getPointer() || Loc.isInvalid()) {
-    if (file)
-      *file = 0;
-    if (line)
-      *line = 0;
-    if (column)
-      *column = 0;
-    return;
-  }
-
   // FIXME: This is largely copy-paste from
   ///TextDiagnosticPrinter::HighlightRange.  When it is clear that this is
   // what we want the two routines should be refactored.  
@@ -1157,6 +1144,30 @@
       InstLoc = InstLoc.getFileLocWithOffset(Length - 1);
   }
 
+  return InstLoc;
+}
+
+void clang_getInstantiationLocation(CXSourceLocation location,
+                                    CXFile *file,
+                                    unsigned *line,
+                                    unsigned *column) {
+  cxloc::CXSourceLocationPtr Ptr
+    = cxloc::CXSourceLocationPtr::getFromOpaqueValue(location.ptr_data);
+  SourceLocation Loc = SourceLocation::getFromRawEncoding(location.int_data);
+
+  if (!Ptr.getPointer() || Loc.isInvalid()) {
+    if (file)
+      *file = 0;
+    if (line)
+      *line = 0;
+    if (column)
+      *column = 0;
+    return;
+  }
+
+  SourceLocation InstLoc = getAdjustedSourceLocation(location);
+  ASTContext &Context = *Ptr.getPointer();
+  SourceManager &SM = Context.getSourceManager();
   if (file)
     *file = (void *)SM.getFileEntryForID(SM.getFileID(InstLoc));
   if (line)
@@ -1165,6 +1176,23 @@
     *column = SM.getInstantiationColumnNumber(InstLoc);
 }
 
+void clang_getInstantiationLocationOffset(CXSourceLocation location,
+                                          CXFile *file,
+                                          unsigned *offset) {
+  cxloc::CXSourceLocationPtr Ptr
+    = cxloc::CXSourceLocationPtr::getFromOpaqueValue(location.ptr_data);
+  SourceLocation Loc = SourceLocation::getFromRawEncoding(location.int_data);
+
+  ASTContext &Context = *Ptr.getPointer();
+  SourceManager &SM = Context.getSourceManager();
+  SourceLocation InstLoc = getAdjustedSourceLocation(location);
+  std::pair<FileID, unsigned> Decomposed = SM.getDecomposedLoc(InstLoc);
+  if (file)
+    *file = (void *)SM.getFileEntryForID(Decomposed.first);
+  if (offset)
+    *offset = Decomposed.second;
+}
+
 CXSourceLocation clang_getRangeStart(CXSourceRange range) {
   CXSourceLocation Result = { range.ptr_data, range.begin_int_data };
   return Result;
