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