mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 00:56:05 +00:00

This reverts commit d618f1c3b12effd0c2bdb7d02108d3551f389d3d. This commit wasn't reviewed ahead of time and significant concerns were raised immediately after it landed. According to our developer policy this warrants immediate revert of the commit. https://llvm.org/docs/DeveloperPolicy.html#patch-reversion-policy Differential Revision: https://reviews.llvm.org/D155509
98 lines
3.4 KiB
Objective-C
98 lines
3.4 KiB
Objective-C
// RUN: %clang_cc1 -x objective-c -triple x86_64-apple-darwin10 -fblocks -emit-llvm %s -o - | FileCheck %s
|
|
// RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin10 -fblocks -emit-llvm %s -o - | FileCheck %s
|
|
// rdar://10111397
|
|
|
|
#if __has_feature(objc_bool)
|
|
#define YES __objc_yes
|
|
#define NO __objc_no
|
|
#else
|
|
#define YES ((BOOL)1)
|
|
#define NO ((BOOL)0)
|
|
#endif
|
|
|
|
#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
|
|
typedef unsigned long NSUInteger;
|
|
typedef long NSInteger;
|
|
#else
|
|
typedef unsigned int NSUInteger;
|
|
typedef int NSInteger;
|
|
#endif
|
|
typedef signed char BOOL;
|
|
|
|
@interface NSNumber @end
|
|
|
|
@interface NSNumber (NSNumberCreation)
|
|
#if __has_feature(objc_array_literals)
|
|
+ (NSNumber *)numberWithChar:(char)value;
|
|
+ (NSNumber *)numberWithUnsignedChar:(unsigned char)value;
|
|
+ (NSNumber *)numberWithShort:(short)value;
|
|
+ (NSNumber *)numberWithUnsignedShort:(unsigned short)value;
|
|
+ (NSNumber *)numberWithInt:(int)value;
|
|
+ (NSNumber *)numberWithUnsignedInt:(unsigned int)value;
|
|
+ (NSNumber *)numberWithLong:(long)value;
|
|
+ (NSNumber *)numberWithUnsignedLong:(unsigned long)value;
|
|
+ (NSNumber *)numberWithLongLong:(long long)value;
|
|
+ (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value;
|
|
+ (NSNumber *)numberWithFloat:(float)value;
|
|
+ (NSNumber *)numberWithDouble:(double)value;
|
|
+ (NSNumber *)numberWithBool:(BOOL)value;
|
|
+ (NSNumber *)numberWithInteger:(NSInteger)value ;
|
|
+ (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value ;
|
|
#endif
|
|
@end
|
|
|
|
@interface NSDate
|
|
+ (NSDate *) date;
|
|
@end
|
|
|
|
#if __has_feature(objc_dictionary_literals)
|
|
@interface NSDictionary
|
|
+ (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(NSUInteger)cnt;
|
|
@end
|
|
#endif
|
|
|
|
id NSUserName(void);
|
|
|
|
// CHECK: define{{.*}} i32 @main() [[NUW:#[0-9]+]]
|
|
int main(void) {
|
|
// CHECK: call{{.*}}@objc_msgSend{{.*}}i8 noundef signext 97
|
|
NSNumber *aNumber = @'a';
|
|
// CHECK: call{{.*}}@objc_msgSend{{.*}}i32 noundef 42
|
|
NSNumber *fortyTwo = @42;
|
|
// CHECK: call{{.*}}@objc_msgSend{{.*}}i32 noundef -42
|
|
NSNumber *negativeFortyTwo = @-42;
|
|
// CHECK: call{{.*}}@objc_msgSend{{.*}}i32 noundef 42
|
|
NSNumber *positiveFortyTwo = @+42;
|
|
// CHECK: call{{.*}}@objc_msgSend{{.*}}i32 noundef 42
|
|
NSNumber *fortyTwoUnsigned = @42u;
|
|
// CHECK: call{{.*}}@objc_msgSend{{.*}}i64 noundef 42
|
|
NSNumber *fortyTwoLong = @42l;
|
|
// CHECK: call{{.*}}@objc_msgSend{{.*}}i64 noundef 42
|
|
NSNumber *fortyTwoLongLong = @42ll;
|
|
// CHECK: call{{.*}}@objc_msgSend{{.*}}float noundef 0x400921FB60000000
|
|
NSNumber *piFloat = @3.141592654f;
|
|
// CHECK: call{{.*}}@objc_msgSend{{.*}}double noundef 0x400921FB54411744
|
|
NSNumber *piDouble = @3.1415926535;
|
|
// CHECK: call{{.*}}@objc_msgSend{{.*}}i8 noundef signext 1
|
|
NSNumber *yesNumber = @__objc_yes;
|
|
// CHECK: call{{.*}}@objc_msgSend{{.*}}i8 noundef signext 0
|
|
NSNumber *noNumber = @__objc_no;
|
|
// CHECK: call{{.*}}@objc_msgSend{{.*}}i8 noundef signext 1
|
|
NSNumber *yesNumber1 = @YES;
|
|
// CHECK: call{{.*}}@objc_msgSend{{.*}}i8 noundef signext 0
|
|
NSNumber *noNumber1 = @NO;
|
|
NSDictionary *dictionary = @{@"name" : NSUserName(),
|
|
@"date" : [NSDate date] };
|
|
return __objc_yes == __objc_no;
|
|
}
|
|
|
|
// rdar://10579122
|
|
typedef BOOL (^foo)(void);
|
|
extern void bar(foo a);
|
|
|
|
void baz(void) {
|
|
bar(^(void) { return YES; });
|
|
}
|
|
|
|
// CHECK: attributes [[NUW]] = { {{.*}}noinline {{(norecurse )?}}nounwind{{.*}} }
|