1 | // RUN: rm -rf %t |
2 | // RUN: %clang_cc1 -fobjc-arc -objcmt-migrate-literals -objcmt-migrate-subscripting -mt-migrate-directory %t %s -x objective-c++ -verify |
3 | // RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result |
4 | // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c++ %s.result |
5 | |
6 | #define YES __objc_yes |
7 | #define NO __objc_no |
8 | |
9 | typedef long NSInteger; |
10 | typedef unsigned long NSUInteger; |
11 | typedef signed char BOOL; |
12 | #define nil ((void*) 0) |
13 | |
14 | #define INT_MIN (-__INT_MAX__ -1) |
15 | |
16 | @interface NSObject |
17 | + (id)alloc; |
18 | @end |
19 | |
20 | @interface NSNumber : NSObject |
21 | @end |
22 | |
23 | @interface NSNumber (NSNumberCreation) |
24 | - (id)initWithChar:(char)value; |
25 | - (id)initWithUnsignedChar:(unsigned char)value; |
26 | - (id)initWithShort:(short)value; |
27 | - (id)initWithUnsignedShort:(unsigned short)value; |
28 | - (id)initWithInt:(int)value; |
29 | - (id)initWithUnsignedInt:(unsigned int)value; |
30 | - (id)initWithLong:(long)value; |
31 | - (id)initWithUnsignedLong:(unsigned long)value; |
32 | - (id)initWithLongLong:(long long)value; |
33 | - (id)initWithUnsignedLongLong:(unsigned long long)value; |
34 | - (id)initWithFloat:(float)value; |
35 | - (id)initWithDouble:(double)value; |
36 | - (id)initWithBool:(BOOL)value; |
37 | - (id)initWithInteger:(NSInteger)value; |
38 | - (id)initWithUnsignedInteger:(NSUInteger)value; |
39 | |
40 | + (NSNumber *)numberWithChar:(char)value; |
41 | + (NSNumber *)numberWithUnsignedChar:(unsigned char)value; |
42 | + (NSNumber *)numberWithShort:(short)value; |
43 | + (NSNumber *)numberWithUnsignedShort:(unsigned short)value; |
44 | + (NSNumber *)numberWithInt:(int)value; |
45 | + (NSNumber *)numberWithUnsignedInt:(unsigned int)value; |
46 | + (NSNumber *)numberWithLong:(long)value; |
47 | + (NSNumber *)numberWithUnsignedLong:(unsigned long)value; |
48 | + (NSNumber *)numberWithLongLong:(long long)value; |
49 | + (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value; |
50 | + (NSNumber *)numberWithFloat:(float)value; |
51 | + (NSNumber *)numberWithDouble:(double)value; |
52 | + (NSNumber *)numberWithBool:(BOOL)value; |
53 | + (NSNumber *)numberWithInteger:(NSInteger)value; |
54 | + (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value; |
55 | @end |
56 | |
57 | enum { |
58 | NSASCIIStringEncoding = 1, |
59 | NSUTF8StringEncoding = 4, |
60 | NSUnicodeStringEncoding = 10 |
61 | }; |
62 | typedef NSUInteger NSStringEncoding; |
63 | |
64 | @interface NSString : NSObject |
65 | @end |
66 | |
67 | @interface NSString (NSStringExtensionMethods) |
68 | + (id)stringWithUTF8String:(const char *)nullTerminatedCString; |
69 | + (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc; |
70 | + (id)stringWithCString:(const char *)bytes; |
71 | - (instancetype)initWithUTF8String:(const char *)nullTerminatedCString; |
72 | @end |
73 | |
74 | enum MyEnm { |
75 | ME_foo |
76 | }; |
77 | |
78 | void foo() { |
79 | [NSNumber numberWithInt:INT_MIN]; |
80 | bool cppb; |
81 | [NSNumber numberWithBool:cppb]; |
82 | MyEnm myenum; |
83 | [NSNumber numberWithInteger:myenum]; |
84 | [NSNumber numberWithInteger:ME_foo]; |
85 | [NSNumber numberWithDouble:cppb]; // expected-warning {{converting to boxing syntax requires casting 'bool' to 'double'}} |
86 | } |
87 | |
88 | void boxString() { |
89 | NSString *s = [NSString stringWithUTF8String:"box"]; |
90 | const char *cstr1; |
91 | char *cstr2; |
92 | s = [NSString stringWithUTF8String:cstr1]; |
93 | s = [NSString stringWithUTF8String:cstr2]; |
94 | s = [NSString stringWithCString:cstr1 encoding:NSASCIIStringEncoding]; |
95 | s = [NSString stringWithCString:cstr1 encoding:NSUTF8StringEncoding]; |
96 | s = [NSString stringWithCString:cstr1 encoding: NSUnicodeStringEncoding]; |
97 | NSStringEncoding encode; |
98 | s = [NSString stringWithCString:cstr1 encoding:encode]; |
99 | s = [NSString stringWithCString:cstr1]; |
100 | |
101 | static const char strarr[] = "coolbox"; |
102 | s = [NSString stringWithUTF8String:strarr]; |
103 | // rdar://18080352 |
104 | const char *utf8Bytes = "blah"; |
105 | NSString *string1 = [NSString stringWithUTF8String:utf8Bytes]; |
106 | NSString *string2 = [[NSString alloc] initWithUTF8String:utf8Bytes]; |
107 | } |
108 | |