aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-05-23 23:06:56 +0000
committerChris Lattner <sabre@nondot.org>2008-05-23 23:06:56 +0000
commit9ed7cfd351c5f90df04e5d46680a9b4373b58ee4 (patch)
tree9237b54a6b2905af7d46f514ca1daeece3de1829
parentcfd4c7bef7a76c568ec033e91ba3f521e10bcbb3 (diff)
fix an inconsistency computing offsets that caused a crash on rewrite-nest.m
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51514 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Rewrite/Rewriter.cpp2
-rw-r--r--test/Rewriter/rewrite-nest.m29
2 files changed, 30 insertions, 1 deletions
diff --git a/lib/Rewrite/Rewriter.cpp b/lib/Rewrite/Rewriter.cpp
index 4f54102d02..bea7c00352 100644
--- a/lib/Rewrite/Rewriter.cpp
+++ b/lib/Rewrite/Rewriter.cpp
@@ -52,7 +52,7 @@ void RewriteBuffer::InsertText(unsigned OrigOffset,
/// operation.
void RewriteBuffer::ReplaceText(unsigned OrigOffset, unsigned OrigLength,
const char *NewStr, unsigned NewLength) {
- unsigned RealOffset = getMappedOffset(OrigOffset, true);
+ unsigned RealOffset = getMappedOffset(OrigOffset, false);
Buffer.erase(RealOffset, OrigLength);
Buffer.insert(RealOffset, NewStr, NewStr+NewLength);
if (OrigLength != NewLength)
diff --git a/test/Rewriter/rewrite-nest.m b/test/Rewriter/rewrite-nest.m
new file mode 100644
index 0000000000..1fe0c75850
--- /dev/null
+++ b/test/Rewriter/rewrite-nest.m
@@ -0,0 +1,29 @@
+// RUN: clang -rewrite-objc %s -o =-
+
+#include <objc/objc.h>
+
+@interface NSMapTable @end
+@interface NSEnumerator @end
+
+typedef unsigned int NSUInteger;
+
+@interface NSConcreteMapTable : NSMapTable {
+@public
+ NSUInteger capacity;
+}
+@end
+
+@interface NSConcreteMapTableValueEnumerator : NSEnumerator {
+ NSConcreteMapTable *mapTable;
+}
+@end
+
+@implementation NSConcreteMapTableValueEnumerator
+
+- nextObject {
+ while (mapTable->capacity) {
+ }
+ return 0;
+}
+@end
+