summaryrefslogtreecommitdiffstats
path: root/test/CodeGenObjC/debug-info-block-line.m
diff options
context:
space:
mode:
Diffstat (limited to 'test/CodeGenObjC/debug-info-block-line.m')
-rw-r--r--test/CodeGenObjC/debug-info-block-line.m89
1 files changed, 89 insertions, 0 deletions
diff --git a/test/CodeGenObjC/debug-info-block-line.m b/test/CodeGenObjC/debug-info-block-line.m
new file mode 100644
index 0000000..c913a97
--- /dev/null
+++ b/test/CodeGenObjC/debug-info-block-line.m
@@ -0,0 +1,89 @@
+// REQUIRES: x86-64-registered-target
+// RUN: %clang_cc1 -emit-llvm -fblocks -fobjc-default-synthesize-properties -fobjc-arc -O0 -g -triple x86_64-apple-darwin10 %s -o - | FileCheck %s
+
+// rdar://11562117
+typedef unsigned int NSUInteger;
+typedef long NSInteger;
+typedef signed char BOOL;
+
+#define nil ((void*) 0)
+#define YES ((BOOL)1)
+#define NO ((BOOL)0)
+
+@interface NSObject
+- (id)init;
+@end
+
+@interface NSError : NSObject
+@end
+
+@interface NSString : NSObject
+@end
+
+@interface NSString (NSStringExtensionMethods)
+- (void)enumerateLinesUsingBlock:(void (^)(NSString *line, BOOL *stop))block;
+@end
+
+@interface NSData : NSObject
+@end
+
+@interface NSData (ASBase64)
+- (NSString *)encodedString:(NSInteger)position;
+- (NSData *)compressedData;
+@end
+
+typedef void (^TDataCompletionBlock)(NSData *data, NSError *error);
+@interface TMap : NSObject
+- (NSString *)identifier;
+- (NSString *)name;
++ (TMap *)mapForID:(NSString *)identifier;
+- (void)dataWithCompletionBlock:(TDataCompletionBlock)block;
+@end
+
+typedef enum : NSUInteger {
+ TOK = 100,
+ TError = 125,
+} TResponseCode;
+
+@interface TConnection : NSObject
+- (void)sendString:(NSString *)string;
+- (void)sendFormat:(NSString *)format, ...;
+- (void)sendResponseCode:(TResponseCode)responseCode dataFollows:(BOOL)flag
+ format:(NSString *)format, ...;
+@end
+
+@interface TServer : NSObject
+@end
+
+@implementation TServer
+- (void)serverConnection:(TConnection *)connection getCommand:(NSString *)str
+{
+ NSString *mapID = nil;
+ TMap *map = [TMap mapForID:mapID];
+// Make sure we do not map code generated for the block to the above line.
+// CHECK: define internal void @"__39-[TServer serverConnection:getCommand:]_block_invoke"
+// CHECK: call void @objc_storeStrong(i8** [[ZERO:%.*]], i8* [[ONE:%.*]]) [[NUW:#[0-9]+]]
+// CHECK: call void @objc_storeStrong(i8** [[TWO:%.*]], i8* [[THREE:%.*]]) [[NUW]]
+// CHECK: bitcast %5** [[TMP:%.*]] to i8**
+// CHECK: call void @objc_storeStrong(i8** [[VAL1:%.*]], i8* null) [[NUW]], !dbg ![[MD1:.*]]
+// CHECK: bitcast %4** [[TMP:%.*]] to i8**
+// CHECK: call void @objc_storeStrong(i8** [[VAL2:%.*]], i8* null) [[NUW]], !dbg ![[MD1]]
+// CHECK-NEXT: ret
+// CHECK: attributes [[NUW]] = { nounwind }
+// CHECK: ![[MD1]] = metadata !{i32 87
+ [map dataWithCompletionBlock:^(NSData *data, NSError *error) {
+ if (data) {
+ NSString *encoded = [[data compressedData] encodedString:18];
+ [connection sendResponseCode:TOK dataFollows:YES
+ format:@"Sending \"%@\" (%@)", [map name], [map identifier]];
+ [encoded enumerateLinesUsingBlock:^(NSString *line, BOOL *stop) {
+ [connection sendFormat:@"%@\r\n", line];
+ }];
+ [connection sendString:@".\r\n"];
+ } else {
+ [connection sendResponseCode:TError dataFollows:NO
+ format:@"Failed \"%@\" (%@)", [map name], [map identifier]];
+ }
+ }];
+}
+@end
OpenPOWER on IntegriCloud