[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / clang / test / CodeGenObjC / debug-info-block-line.m
blob8acf56ab447a7931504d8788d6a78ed6f33ea976
1 // REQUIRES: x86-registered-target
2 // RUN: %clang_cc1 -no-opaque-pointers -emit-llvm -fblocks -fobjc-arc -debug-info-kind=limited -triple x86_64-apple-darwin10 %s -o - | FileCheck %s
4 // rdar://11562117
5 typedef unsigned int NSUInteger;
6 typedef long NSInteger;
7 typedef signed char BOOL;
9 #define nil ((void*) 0)
10 #define YES             ((BOOL)1)
11 #define NO              ((BOOL)0)
13 @interface NSObject
14 - (id)init;
15 @end
17 @interface NSError : NSObject
18 @end
20 @interface NSString : NSObject
21 @end
23 @interface NSString (NSStringExtensionMethods)
24 - (void)enumerateLinesUsingBlock:(void (^)(NSString *line, BOOL *stop))block;
25 @end
27 @interface NSData : NSObject
28 @end
30 @interface NSData (ASBase64)
31 - (NSString *)encodedString:(NSInteger)position;
32 - (NSData *)compressedData;
33 @end
35 typedef void (^TDataCompletionBlock)(NSData *data, NSError *error);
36 @interface TMap : NSObject
37 - (NSString *)identifier;
38 - (NSString *)name;
39 + (TMap *)mapForID:(NSString *)identifier;
40 - (void)dataWithCompletionBlock:(TDataCompletionBlock)block;
41 @end
43 typedef enum : NSUInteger {
44     TOK                = 100,
45     TError = 125,
46 } TResponseCode;
48 @interface TConnection : NSObject
49 - (void)sendString:(NSString *)string;
50 - (void)sendFormat:(NSString *)format, ...;
51 - (void)sendResponseCode:(TResponseCode)responseCode dataFollows:(BOOL)flag
52                          format:(NSString *)format, ...;
53 @end
55 @interface TServer : NSObject
56 @end
58 @implementation TServer
59 - (void)serverConnection:(TConnection *)connection getCommand:(NSString *)str
61     NSString    *mapID = nil;
62     TMap       *map = [TMap mapForID:mapID];
63 // Make sure we do not map code generated for the block to the above line.
64 // CHECK: define internal void @"__39-[TServer serverConnection:getCommand:]_block_invoke"
65 // CHECK: call void @llvm.objc.storeStrong(i8** [[ZERO:%.*]], i8* [[ONE:%.*]]) [[NUW:#[0-9]+]]
66 // CHECK: call void @llvm.objc.storeStrong(i8** [[TWO:%.*]], i8* [[THREE:%.*]]) [[NUW]]
67 // CHECK: call {{.*}}@objc_msgSend{{.*}}, !dbg ![[LINE_ABOVE:[0-9]+]]
68 // CHECK: getelementptr
69 // CHECK-NOT: !dbg, ![[LINE_ABOVE]]
70 // CHECK: bitcast %5** [[TMP:%.*]] to i8**
71 // CHECK-NOT: !dbg, ![[LINE_ABOVE]]
72 // CHECK: call void @llvm.objc.storeStrong(i8** [[VAL1:%.*]], i8* null) [[NUW]]
73 // CHECK-NEXT: bitcast %4** [[TMP:%.*]] to i8**
74 // CHECK-NEXT: call void @llvm.objc.storeStrong(i8** [[VAL2:%.*]], i8* null) [[NUW]]
75 // CHECK-NEXT: ret
76 // CHECK: attributes [[NUW]] = { nounwind }
77     [map dataWithCompletionBlock:^(NSData *data, NSError *error) {
78         if (data) {
79             NSString    *encoded = [[data compressedData] encodedString:18];
80             [connection sendResponseCode:TOK dataFollows:YES
81                 format:@"Sending \"%@\" (%@)", [map name], [map identifier]];
82             [encoded enumerateLinesUsingBlock:^(NSString *line, BOOL *stop) {
83                 [connection sendFormat:@"%@\r\n", line];
84             }];
85             [connection sendString:@".\r\n"];
86         } else {
87             [connection sendResponseCode:TError dataFollows:NO
88                 format:@"Failed \"%@\" (%@)", [map name], [map identifier]];
89         }
90     }];
92 @end