1*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Litypedef long NSInteger; 4*67e74705SXin Litypedef unsigned long NSUInteger; 5*67e74705SXin Litypedef signed char BOOL; 6*67e74705SXin Li#define nil ((void*) 0) 7*67e74705SXin Li 8*67e74705SXin Li@interface NSObject 9*67e74705SXin Li+ (id)alloc; 10*67e74705SXin Li@end 11*67e74705SXin Li 12*67e74705SXin Li@interface NSNumber : NSObject 13*67e74705SXin Li@end 14*67e74705SXin Li 15*67e74705SXin Li@interface NSNumber (NSNumberCreation) 16*67e74705SXin Li- (id)initWithChar:(char)value; 17*67e74705SXin Li- (id)initWithUnsignedChar:(unsigned char)value; 18*67e74705SXin Li- (id)initWithShort:(short)value; 19*67e74705SXin Li- (id)initWithUnsignedShort:(unsigned short)value; 20*67e74705SXin Li- (id)initWithInt:(int)value; 21*67e74705SXin Li- (id)initWithUnsignedInt:(unsigned int)value; 22*67e74705SXin Li- (id)initWithLong:(long)value; 23*67e74705SXin Li- (id)initWithUnsignedLong:(unsigned long)value; 24*67e74705SXin Li- (id)initWithLongLong:(long long)value; 25*67e74705SXin Li- (id)initWithUnsignedLongLong:(unsigned long long)value; 26*67e74705SXin Li- (id)initWithFloat:(float)value; 27*67e74705SXin Li- (id)initWithDouble:(double)value; 28*67e74705SXin Li- (id)initWithBool:(BOOL)value; 29*67e74705SXin Li- (id)initWithInteger:(NSInteger)value; 30*67e74705SXin Li- (id)initWithUnsignedInteger:(NSUInteger)value; 31*67e74705SXin Li 32*67e74705SXin Li+ (NSNumber *)numberWithChar:(char)value; 33*67e74705SXin Li+ (NSNumber *)numberWithUnsignedChar:(unsigned char)value; 34*67e74705SXin Li+ (NSNumber *)numberWithShort:(short)value; 35*67e74705SXin Li+ (NSNumber *)numberWithUnsignedShort:(unsigned short)value; 36*67e74705SXin Li+ (NSNumber *)numberWithInt:(int)value; 37*67e74705SXin Li+ (NSNumber *)numberWithUnsignedInt:(unsigned int)value; 38*67e74705SXin Li+ (NSNumber *)numberWithLong:(long)value; 39*67e74705SXin Li+ (NSNumber *)numberWithUnsignedLong:(unsigned long)value; 40*67e74705SXin Li+ (NSNumber *)numberWithLongLong:(long long)value; 41*67e74705SXin Li+ (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value; 42*67e74705SXin Li+ (NSNumber *)numberWithFloat:(float)value; 43*67e74705SXin Li+ (NSNumber *)numberWithDouble:(double)value; 44*67e74705SXin Li+ (NSNumber *)numberWithBool:(BOOL)value; 45*67e74705SXin Li+ (NSNumber *)numberWithInteger:(NSInteger)value; 46*67e74705SXin Li+ (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value; 47*67e74705SXin Li@end 48*67e74705SXin Li 49*67e74705SXin Li@interface NSString : NSObject 50*67e74705SXin Li@end 51*67e74705SXin Li 52*67e74705SXin Li@interface NSString (NSStringExtensionMethods) 53*67e74705SXin Li+ (id)stringWithUTF8String:(const char *)nullTerminatedCString; 54*67e74705SXin Li@end 55*67e74705SXin Li 56*67e74705SXin Li// CHECK: [[WithIntMeth:@.*]] = private global [15 x i8] c"numberWithInt:\00" 57*67e74705SXin Li// CHECK: [[WithIntSEL:@.*]] = private externally_initialized global i8* getelementptr inbounds ([15 x i8], [15 x i8]* [[WithIntMeth]] 58*67e74705SXin Li// CHECK: [[WithCharMeth:@.*]] = private global [16 x i8] c"numberWithChar:\00" 59*67e74705SXin Li// CHECK: [[WithCharSEL:@.*]] = private externally_initialized global i8* getelementptr inbounds ([16 x i8], [16 x i8]* [[WithCharMeth]] 60*67e74705SXin Li// CHECK: [[WithBoolMeth:@.*]] = private global [16 x i8] c"numberWithBool:\00" 61*67e74705SXin Li// CHECK: [[WithBoolSEL:@.*]] = private externally_initialized global i8* getelementptr inbounds ([16 x i8], [16 x i8]* [[WithBoolMeth]] 62*67e74705SXin Li// CHECK: [[WithIntegerMeth:@.*]] = private global [19 x i8] c"numberWithInteger:\00" 63*67e74705SXin Li// CHECK: [[WithIntegerSEL:@.*]] = private externally_initialized global i8* getelementptr inbounds ([19 x i8], [19 x i8]* [[WithIntegerMeth]] 64*67e74705SXin Li// CHECK: [[WithUnsignedIntegerMeth:@.*]] = private global [27 x i8] c"numberWithUnsignedInteger:\00" 65*67e74705SXin Li// CHECK: [[WithUnsignedIntegerSEL:@.*]] = private externally_initialized global i8* getelementptr inbounds ([27 x i8], [27 x i8]* [[WithUnsignedIntegerMeth]] 66*67e74705SXin Li// CHECK: [[stringWithUTF8StringMeth:@.*]] = private global [22 x i8] c"stringWithUTF8String:\00" 67*67e74705SXin Li// CHECK: [[stringWithUTF8StringSEL:@.*]] = private externally_initialized global i8* getelementptr inbounds ([22 x i8], [22 x i8]* [[stringWithUTF8StringMeth]] 68*67e74705SXin Li 69*67e74705SXin Liint main() { 70*67e74705SXin Li // CHECK: load i8*, i8** [[WithIntSEL]] 71*67e74705SXin Li int i; @(i); 72*67e74705SXin Li // CHECK: load i8*, i8** [[WithCharSEL]] 73*67e74705SXin Li signed char sc; @(sc); 74*67e74705SXin Li // CHECK: load i8*, i8** [[WithBoolSEL]] 75*67e74705SXin Li BOOL b; @(b); 76*67e74705SXin Li // CHECK: load i8*, i8** [[WithBoolSEL]] 77*67e74705SXin Li typeof(b) b2; @(b2); 78*67e74705SXin Li // CHECK: load i8*, i8** [[WithBoolSEL]] 79*67e74705SXin Li typedef const typeof(b) MyBOOL; MyBOOL b3; @(b3); 80*67e74705SXin Li // CHECK: load i8*, i8** [[WithBoolSEL]] 81*67e74705SXin Li @((BOOL)i); 82*67e74705SXin Li // CHECK: load i8*, i8** [[WithIntegerSEL]] 83*67e74705SXin Li @((NSInteger)i); 84*67e74705SXin Li // CHECK: load i8*, i8** [[WithUnsignedIntegerSEL]] 85*67e74705SXin Li @((NSUInteger)i); 86*67e74705SXin Li // CHECK: load i8*, i8** [[stringWithUTF8StringSEL]] 87*67e74705SXin Li const char *s; @(s); 88*67e74705SXin Li 89*67e74705SXin Li typedef enum : NSInteger { Red, Green, Blue } Color; 90*67e74705SXin Li // CHECK: load i8*, i8** [[WithIntegerSEL]] 91*67e74705SXin Li @(Red); 92*67e74705SXin Li Color col = Red; 93*67e74705SXin Li // CHECK: load i8*, i8** [[WithIntegerSEL]] 94*67e74705SXin Li @(col); 95*67e74705SXin Li} 96