xref: /aosp_15_r20/external/clang/test/CodeGenObjC/objc-literal-tests.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -x objective-c -triple x86_64-apple-darwin10 -fblocks -emit-llvm %s -o - | FileCheck %s
2*67e74705SXin Li// RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin10 -fblocks -emit-llvm %s -o - | FileCheck %s
3*67e74705SXin Li// rdar://10111397
4*67e74705SXin Li
5*67e74705SXin Li#if __has_feature(objc_bool)
6*67e74705SXin Li#define YES __objc_yes
7*67e74705SXin Li#define NO __objc_no
8*67e74705SXin Li#else
9*67e74705SXin Li#define YES             ((BOOL)1)
10*67e74705SXin Li#define NO              ((BOOL)0)
11*67e74705SXin Li#endif
12*67e74705SXin Li
13*67e74705SXin Li#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
14*67e74705SXin Litypedef unsigned long NSUInteger;
15*67e74705SXin Litypedef long NSInteger;
16*67e74705SXin Li#else
17*67e74705SXin Litypedef unsigned int NSUInteger;
18*67e74705SXin Litypedef int NSInteger;
19*67e74705SXin Li#endif
20*67e74705SXin Litypedef signed char BOOL;
21*67e74705SXin Li
22*67e74705SXin Li@interface NSNumber @end
23*67e74705SXin Li
24*67e74705SXin Li@interface NSNumber (NSNumberCreation)
25*67e74705SXin Li#if __has_feature(objc_array_literals)
26*67e74705SXin Li+ (NSNumber *)numberWithChar:(char)value;
27*67e74705SXin Li+ (NSNumber *)numberWithUnsignedChar:(unsigned char)value;
28*67e74705SXin Li+ (NSNumber *)numberWithShort:(short)value;
29*67e74705SXin Li+ (NSNumber *)numberWithUnsignedShort:(unsigned short)value;
30*67e74705SXin Li+ (NSNumber *)numberWithInt:(int)value;
31*67e74705SXin Li+ (NSNumber *)numberWithUnsignedInt:(unsigned int)value;
32*67e74705SXin Li+ (NSNumber *)numberWithLong:(long)value;
33*67e74705SXin Li+ (NSNumber *)numberWithUnsignedLong:(unsigned long)value;
34*67e74705SXin Li+ (NSNumber *)numberWithLongLong:(long long)value;
35*67e74705SXin Li+ (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value;
36*67e74705SXin Li+ (NSNumber *)numberWithFloat:(float)value;
37*67e74705SXin Li+ (NSNumber *)numberWithDouble:(double)value;
38*67e74705SXin Li+ (NSNumber *)numberWithBool:(BOOL)value;
39*67e74705SXin Li+ (NSNumber *)numberWithInteger:(NSInteger)value ;
40*67e74705SXin Li+ (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value ;
41*67e74705SXin Li#endif
42*67e74705SXin Li@end
43*67e74705SXin Li
44*67e74705SXin Li@interface NSDate
45*67e74705SXin Li+ (NSDate *) date;
46*67e74705SXin Li@end
47*67e74705SXin Li
48*67e74705SXin Li#if __has_feature(objc_dictionary_literals)
49*67e74705SXin Li@interface NSDictionary
50*67e74705SXin Li+ (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(NSUInteger)cnt;
51*67e74705SXin Li@end
52*67e74705SXin Li#endif
53*67e74705SXin Li
54*67e74705SXin Liid NSUserName();
55*67e74705SXin Li
56*67e74705SXin Li// CHECK: define i32 @main() [[NUW:#[0-9]+]]
57*67e74705SXin Liint main() {
58*67e74705SXin Li  // CHECK: call{{.*}}@objc_msgSend{{.*}}i8 signext 97
59*67e74705SXin Li  NSNumber *aNumber = @'a';
60*67e74705SXin Li  // CHECK: call{{.*}}@objc_msgSend{{.*}}i32 42
61*67e74705SXin Li  NSNumber *fortyTwo = @42;
62*67e74705SXin Li  // CHECK: call{{.*}}@objc_msgSend{{.*}}i32 -42
63*67e74705SXin Li  NSNumber *negativeFortyTwo = @-42;
64*67e74705SXin Li  // CHECK: call{{.*}}@objc_msgSend{{.*}}i32 42
65*67e74705SXin Li  NSNumber *positiveFortyTwo = @+42;
66*67e74705SXin Li  // CHECK: call{{.*}}@objc_msgSend{{.*}}i32 42
67*67e74705SXin Li  NSNumber *fortyTwoUnsigned = @42u;
68*67e74705SXin Li  // CHECK: call{{.*}}@objc_msgSend{{.*}}i64 42
69*67e74705SXin Li  NSNumber *fortyTwoLong = @42l;
70*67e74705SXin Li  // CHECK: call{{.*}}@objc_msgSend{{.*}}i64 42
71*67e74705SXin Li  NSNumber *fortyTwoLongLong = @42ll;
72*67e74705SXin Li  // CHECK: call{{.*}}@objc_msgSend{{.*}}float 0x400921FB60000000
73*67e74705SXin Li  NSNumber *piFloat = @3.141592654f;
74*67e74705SXin Li  // CHECK: call{{.*}}@objc_msgSend{{.*}}double 0x400921FB54411744
75*67e74705SXin Li  NSNumber *piDouble = @3.1415926535;
76*67e74705SXin Li  // CHECK: call{{.*}}@objc_msgSend{{.*}}i8 signext 1
77*67e74705SXin Li  NSNumber *yesNumber = @__objc_yes;
78*67e74705SXin Li  // CHECK: call{{.*}}@objc_msgSend{{.*}}i8 signext 0
79*67e74705SXin Li  NSNumber *noNumber = @__objc_no;
80*67e74705SXin Li  // CHECK: call{{.*}}@objc_msgSend{{.*}}i8 signext 1
81*67e74705SXin Li  NSNumber *yesNumber1 = @YES;
82*67e74705SXin Li  // CHECK: call{{.*}}@objc_msgSend{{.*}}i8 signext 0
83*67e74705SXin Li  NSNumber *noNumber1 = @NO;
84*67e74705SXin LiNSDictionary *dictionary = @{@"name" : NSUserName(),
85*67e74705SXin Li                             @"date" : [NSDate date] };
86*67e74705SXin Li  return __objc_yes == __objc_no;
87*67e74705SXin Li}
88*67e74705SXin Li
89*67e74705SXin Li// rdar://10579122
90*67e74705SXin Litypedef BOOL (^foo)(void);
91*67e74705SXin Liextern void bar(foo a);
92*67e74705SXin Li
93*67e74705SXin Livoid baz(void) {
94*67e74705SXin Li  bar(^(void) { return YES; });
95*67e74705SXin Li}
96*67e74705SXin Li
97*67e74705SXin Li// CHECK: attributes [[NUW]] = { {{(norecurse )?}}nounwind{{.*}} }
98