Index: include/clang/Rewrite/Rewriter.h
===================================================================
--- include/clang/Rewrite/Rewriter.h	(revision 158236)
+++ include/clang/Rewrite/Rewriter.h	(working copy)
@@ -113,7 +113,7 @@
 
   /// AddReplaceDelta - When a replacement/deletion is made at a position, this
   /// method is used to record that information.
-  void AddReplaceDelta(unsigned OrigOffset, int Change) {
+  void AddRemoveDelta(unsigned OrigOffset, int Change) {
     return Deltas.AddDelta(2*OrigOffset+1, Change);
   }
 };
Index: lib/Rewrite/Rewriter.cpp
===================================================================
--- lib/Rewrite/Rewriter.cpp	(revision 158236)
+++ lib/Rewrite/Rewriter.cpp	(working copy)
@@ -56,7 +56,7 @@
   Buffer.erase(RealOffset, Size);
 
   // Add a delta so that future changes are offset correctly.
-  AddReplaceDelta(OrigOffset, -Size);
+  AddRemoveDelta(OrigOffset, -Size);
 
   if (removeLineIfEmpty) {
     // Find the line that the remove occurred and if it is completely empty
@@ -82,7 +82,7 @@
     }
     if (posI != end() && *posI == '\n') {
       Buffer.erase(curLineStartOffs, lineSize + 1/* + '\n'*/);
-      AddReplaceDelta(curLineStartOffs, -(lineSize + 1/* + '\n'*/));
+      AddRemoveDelta(curLineStartOffs, -(lineSize + 1/* + '\n'*/));
     }
   }
 }
@@ -109,7 +109,12 @@
   Buffer.erase(RealOffset, OrigLength);
   Buffer.insert(RealOffset, NewStr.begin(), NewStr.end());
   if (OrigLength != NewStr.size())
-    AddReplaceDelta(OrigOffset, NewStr.size() - OrigLength);
+  {
+    if (OrigLength)
+      AddRemoveDelta(OrigOffset, -OrigLength);
+    if (NewStr.size())
+      AddInsertDelta(OrigOffset, NewStr.size());
+  }
 }
 
 
