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