Fix a bug steve noticed when handling nested rewrites.  We now turn this:

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

into:

    NSAutoreleasePool * pool = objc_msgSend(objc_msgSend(objc_getClass("NSAutoreleasePool"), sel_getUid("alloc")), sel_getUid("init"));

instead of:

    NSAutoreleasePool * pool = objc_msgSend(objc_msgSend(objc_getClass("NSAutoreleasePool"), sel_getUid("alloc")), sel_getUid("init"))utoreleasePool"), sel_getUid("alloc")) init];



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43347 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Rewrite/Rewriter.cpp b/Rewrite/Rewriter.cpp
index 9e7d1b3..d418564 100644
--- a/Rewrite/Rewriter.cpp
+++ b/Rewrite/Rewriter.cpp
@@ -159,11 +159,27 @@
   if (StartFileID != EndFileID)
     return -1;
   
+  unsigned Delta;
+  
+  // If no edits have been made to this buffer, the delta between the range
+  // Is just the difference in offsets.
+  std::map<unsigned, RewriteBuffer>::const_iterator I =
+    RewriteBuffers.find(StartFileID);
+  if (I == RewriteBuffers.end()) {
+    Delta = EndOff-StartOff;
+  } else {
+    // Otherwise, subtracted the mapped offsets instead.
+    const RewriteBuffer &RB = I->second;
+    Delta = RB.getMappedOffset(EndOff, true);
+    Delta -= RB.getMappedOffset(StartOff);
+  }
+
+  
   // Adjust the end offset to the end of the last token, instead of being the
   // start of the last token.
-  EndOff += Lexer::MeasureTokenLength(Range.getEnd(), *SourceMgr);
+  Delta += Lexer::MeasureTokenLength(Range.getEnd(), *SourceMgr);
   
-  return EndOff-StartOff;
+  return Delta;
 }