brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · 35afbb6 Raw
89 lines · plain
1// REQUIRES: x86-registered-target2// RUN: %clang_cc1 -emit-llvm -fblocks -fobjc-arc -debug-info-kind=limited -triple x86_64-apple-darwin10 %s -o - | FileCheck %s3 4typedef unsigned int NSUInteger;5typedef long NSInteger;6typedef signed char BOOL;7 8#define nil ((void*) 0)9#define YES             ((BOOL)1)10#define NO              ((BOOL)0)11 12@interface NSObject13- (id)init;14@end15 16@interface NSError : NSObject17@end18 19@interface NSString : NSObject20@end21 22@interface NSString (NSStringExtensionMethods)23- (void)enumerateLinesUsingBlock:(void (^)(NSString *line, BOOL *stop))block;24@end25 26@interface NSData : NSObject27@end28 29@interface NSData (ASBase64)30- (NSString *)encodedString:(NSInteger)position;31- (NSData *)compressedData;32@end33 34typedef void (^TDataCompletionBlock)(NSData *data, NSError *error);35@interface TMap : NSObject36- (NSString *)identifier;37- (NSString *)name;38+ (TMap *)mapForID:(NSString *)identifier;39- (void)dataWithCompletionBlock:(TDataCompletionBlock)block;40@end41 42typedef enum : NSUInteger {43    TOK                = 100,44    TError = 125,45} TResponseCode;46 47@interface TConnection : NSObject48- (void)sendString:(NSString *)string;49- (void)sendFormat:(NSString *)format, ...;50- (void)sendResponseCode:(TResponseCode)responseCode dataFollows:(BOOL)flag51                         format:(NSString *)format, ...;52@end53 54@interface TServer : NSObject55@end56 57@implementation TServer58- (void)serverConnection:(TConnection *)connection getCommand:(NSString *)str59{60    NSString    *mapID = nil;61    TMap       *map = [TMap mapForID:mapID];62// Make sure we do not map code generated for the block to the above line.63// CHECK: define internal void @"__39-[TServer serverConnection:getCommand:]_block_invoke"64// CHECK: call void @llvm.objc.storeStrong(ptr [[CONNECTION_ADDR:%.*]], ptr [[ONE:%.*]]) [[NUW:#[0-9]+]]65// CHECK: call void @llvm.objc.storeStrong(ptr [[STR_ADDR:%.*]], ptr [[THREE:%.*]]) [[NUW]]66// CHECK: call {{.*}}@objc_msgSend{{.*}}, !dbg ![[LINE_ABOVE:[0-9]+]]67// CHECK: getelementptr68// CHECK-NOT: !dbg, ![[LINE_ABOVE]]69// CHECK: call void @llvm.objc.storeStrong(ptr [[STR_ADDR]], ptr null) [[NUW]]70// CHECK-NEXT: call void @llvm.objc.storeStrong(ptr [[CONNECTION_ADDR]], ptr null) [[NUW]]71// CHECK-NEXT: ret72// CHECK: attributes [[NUW]] = { nounwind }73    [map dataWithCompletionBlock:^(NSData *data, NSError *error) {74        if (data) {75            NSString    *encoded = [[data compressedData] encodedString:18];76            [connection sendResponseCode:TOK dataFollows:YES77                format:@"Sending \"%@\" (%@)", [map name], [map identifier]];78            [encoded enumerateLinesUsingBlock:^(NSString *line, BOOL *stop) {79                [connection sendFormat:@"%@\r\n", line];80            }];81            [connection sendString:@".\r\n"];82        } else {83            [connection sendResponseCode:TError dataFollows:NO84                format:@"Failed \"%@\" (%@)", [map name], [map identifier]];85        }86    }];87}88@end89