summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenObjC
diff options
context:
space:
mode:
authorAdrian Prantl <aprantl@apple.com>2013-05-30 18:12:23 +0000
committerAdrian Prantl <aprantl@apple.com>2013-05-30 18:12:23 +0000
commit4c9a38a47ad73ef8a88f2ff577705100a9c61726 (patch)
tree052590cd39891ac475afd235b26c7c5fcba35098 /clang/test/CodeGenObjC
parent4bb41e91dbfb226ec67fb8ea15e539ed0a597c3f (diff)
downloadbcm5719-llvm-4c9a38a47ad73ef8a88f2ff577705100a9c61726.tar.gz
bcm5719-llvm-4c9a38a47ad73ef8a88f2ff577705100a9c61726.zip
Do not reuse the debug location of the return value's store if there is autorelease code to be emitted between store and return instructions. This is analoguous to what we do for lexical scope cleanups.
rdar://problem/13977888 llvm-svn: 182947
Diffstat (limited to 'clang/test/CodeGenObjC')
-rw-r--r--clang/test/CodeGenObjC/arc-linetable-autorelease.m40
1 files changed, 40 insertions, 0 deletions
diff --git a/clang/test/CodeGenObjC/arc-linetable-autorelease.m b/clang/test/CodeGenObjC/arc-linetable-autorelease.m
new file mode 100644
index 00000000000..be05ec2fcd8
--- /dev/null
+++ b/clang/test/CodeGenObjC/arc-linetable-autorelease.m
@@ -0,0 +1,40 @@
+// RUN: %clang_cc1 -emit-llvm -fobjc-arc -g -triple x86_64-apple-darwin10 %s -o - | FileCheck %s
+// Ensure that the line info is making sense:
+// ARC cleanups should be at the closing '}'.
+@protocol NSObject
+@end
+
+@interface NSObject <NSObject> {}
+@end
+
+@protocol NSCopying
+@end
+
+@protocol NSCoding
+@end
+
+typedef double CGFloat;
+struct CGRect {};
+typedef struct CGRect CGRect;
+typedef CGRect NSRect;
+NSRect NSMakeRect(CGFloat x, CGFloat y, CGFloat w, CGFloat h);
+@interface NSBezierPath : NSObject <NSCopying, NSCoding>
++ (NSBezierPath *)bezierPathWithRoundedRect:(NSRect)rect xRadius:(CGFloat)xRadius yRadius:(CGFloat)yRadius;
+@end
+@implementation AppDelegate : NSObject {}
+- (NSBezierPath *)_createBezierPathWithWidth:(CGFloat)width height:(CGFloat)height radius:(CGFloat)radius lineWidth:(CGFloat)lineWidth
+{
+ NSRect rect = NSMakeRect(0, 0, width, height);
+ NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:rect xRadius:radius yRadius:radius];
+ CGFloat pattern[2];
+ // CHECK: define {{.*}}_createBezierPathWithWidth
+ // CHECK: load {{.*}} %path, align {{.*}}, !dbg ![[RET:[0-9]+]]
+ // CHECK: call void @objc_storeStrong{{.*}} !dbg ![[ARC1:[0-9]+]]
+ // CHECK: call {{.*}} @objc_autoreleaseReturnValue{{.*}} !dbg ![[ARC2:[0-9]+]]
+ // CHECK: ret {{.*}} !dbg ![[ARC2]]
+ // CHECK: ![[RET]] = metadata !{i32 [[@LINE+1]], i32 0, metadata !{{.*}}, null}
+ return path;
+ // CHECK: ![[ARC1]] = metadata !{i32 [[@LINE+2]], i32 0, metadata !{{.*}}, null}
+ // CHECK: ![[ARC2]] = metadata !{i32 [[@LINE+1]], i32 0, metadata !{{.*}}, null}
+}
+@end
OpenPOWER on IntegriCloud