xref: /aosp_15_r20/external/clang/test/CodeGenObjC/boxing.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
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