Home | History | Annotate | Download | only in ARCMT
      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