1// RUN: rm -rf %t 2// RUN: %clang_cc1 -objcmt-migrate-literals -objcmt-migrate-subscripting -mt-migrate-directory %t %s -x objective-c -triple x86_64-apple-darwin11 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 6typedef signed char BOOL; 7#define nil ((void*) 0) 8 9typedef const struct __CFString * CFStringRef; 10 11@interface NSObject 12+ (id)alloc; 13@end 14 15@protocol NSCopying 16@end 17 18@interface NSString : NSObject 19+ (id)stringWithString:(NSString *)string; 20- (id)initWithString:(NSString *)aString; 21@end 22 23@interface NSArray : NSObject 24- (id)objectAtIndex:(unsigned long)index; 25@end 26 27@interface NSArray (NSExtendedArray) 28- (id)objectAtIndexedSubscript:(unsigned)idx; 29@end 30 31@interface NSArray (NSArrayCreation) 32+ (id)array; 33+ (id)arrayWithObject:(id)anObject; 34+ (id)arrayWithObjects:(const id [])objects count:(unsigned long)cnt; 35+ (id)arrayWithObjects:(id)firstObj, ...; 36+ (id)arrayWithArray:(NSArray *)array; 37 38- (id)initWithObjects:(const id [])objects count:(unsigned long)cnt; 39- (id)initWithObjects:(id)firstObj, ...; 40- (id)initWithArray:(NSArray *)array; 41@end 42 43@interface NSMutableArray : NSArray 44- (void)replaceObjectAtIndex:(unsigned long)index withObject:(id)anObject; 45@end 46 47@interface NSMutableArray (NSExtendedMutableArray) 48- (void)setObject:(id)obj atIndexedSubscript:(unsigned)idx; 49@end 50 51@interface NSDictionary : NSObject 52- (id)objectForKey:(id)aKey; 53@end 54 55@interface NSDictionary (NSExtendedDictionary) 56- (id)objectForKeyedSubscript:(id)key; 57@end 58 59@interface NSDictionary (NSDictionaryCreation) 60+ (id)dictionary; 61+ (id)dictionaryWithObject:(id)object forKey:(id)key; 62+ (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; 63+ (id)dictionaryWithObjectsAndKeys:(id)firstObject, ...; 64+ (id)dictionaryWithDictionary:(NSDictionary *)dict; 65+ (id)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; 66 67- (id)initWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; 68- (id)initWithObjectsAndKeys:(id)firstObject, ...; 69- (id)initWithDictionary:(NSDictionary *)otherDictionary; 70- (id)initWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; 71@end 72 73@interface NSMutableDictionary : NSDictionary 74- (void)setObject:(id)anObject forKey:(id)aKey; 75@end 76 77@interface NSMutableDictionary (NSExtendedMutableDictionary) 78- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key; 79@end 80 81@interface NSNumber : NSObject 82@end 83 84@interface NSNumber (NSNumberCreation) 85+ (NSNumber *)numberWithInt:(int)value; 86@end 87 88#define M(x) (x) 89#define PAIR(x) @#x, [NSNumber numberWithInt:(x)] 90#define TWO(x) ((x), (x)) 91#define TWO_SEP(x,y) ((x), (y)) 92 93@interface I { 94 NSArray *ivarArr; 95} 96@end 97@implementation I 98-(void) foo { 99 NSString *str; 100 NSArray *arr; 101 NSDictionary *dict; 102 103 arr = [NSArray array]; 104 arr = [NSArray arrayWithObject:str]; 105 arr = [NSArray arrayWithObjects:str, str, nil]; 106 dict = [NSDictionary dictionary]; 107 dict = [NSDictionary dictionaryWithObject:arr forKey:str]; 108 dict = [NSDictionary dictionaryWithObjectsAndKeys: @"value1", @"key1", @"value2", @"key2", nil]; 109 dict = [NSDictionary dictionaryWithObjectsAndKeys: PAIR(1), PAIR(2), nil]; 110 dict = [NSDictionary dictionaryWithObjectsAndKeys: 111 @"value1", @"key1", 112#ifdef BLAH 113 @"value2", @"key2", 114#else 115 @"value3", @"key3", 116#endif 117 nil ]; 118 119 id o = [arr objectAtIndex:2]; 120 o = [dict objectForKey:@"key"]; 121 o = TWO([dict objectForKey:@"key"]); 122 o = TWO_SEP([dict objectForKey:@"key"], [arr objectAtIndex:2]); 123 o = [NSDictionary dictionaryWithObject:[NSDictionary dictionary] forKey:@"key"]; 124 NSMutableArray *marr = 0; 125 NSMutableDictionary *mdict = 0; 126 [marr replaceObjectAtIndex:2 withObject:@"val"]; 127 [mdict setObject:@"value" forKey:@"key"]; 128 [marr replaceObjectAtIndex:2 withObject:[arr objectAtIndex:4]]; 129 [mdict setObject:[dict objectForKey:@"key2"] forKey:@"key"]; 130 [mdict setObject:[dict objectForKey:@"key2"] forKey: 131#if 1 132 @"key1" 133#else 134 @"key2" 135#endif 136 ]; 137 [mdict setObject:[dict objectForKey: 138#if 2 139 @"key3" 140#else 141 @"key4" 142#endif 143 ] forKey:@"key"]; 144 [mdict setObject:@"value" forKey:[dict objectForKey: 145#if 3 146 @"key5" 147#else 148 @"key6" 149#endif 150 ] ]; 151 [mdict setObject:@"val" forKey:[dict objectForKey:@"key2"]]; 152 [mdict setObject:[dict objectForKey:@"key1"] forKey:[dict objectForKey:[NSArray arrayWithObject:@"arrkey"]]]; 153 __strong NSArray **parr = 0; 154 o = [*parr objectAtIndex:2]; 155 void *hd; 156 o = [(NSArray*)hd objectAtIndex:2]; 157 o = [ivarArr objectAtIndex:2]; 158 159 dict = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"1", [NSArray array], nil] forKeys:[NSArray arrayWithObjects:@"A", [arr objectAtIndex:2], nil]]; 160 dict = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"1", @"2", nil] forKeys:arr]; 161 dict = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"1", @"2", nil] forKeys:@[@"A", @"B"]]; 162 dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSArray array], @"A", [NSArray array], @"B", nil]; 163} 164@end 165 166extern const CFStringRef globStr; 167 168void test1(NSString *str) { 169 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: str, globStr, nil]; 170 dict = [NSDictionary dictionaryWithObjectsAndKeys: globStr, str, nil]; 171 dict = [NSDictionary dictionaryWithObject:str forKey:globStr]; 172 dict = [NSDictionary dictionaryWithObject:globStr forKey:str]; 173 174 NSArray *arr = [NSArray arrayWithObjects: globStr, globStr, nil]; 175 arr = [NSArray arrayWithObjects: str, globStr, nil]; 176 arr = [NSArray arrayWithObjects: globStr, str, nil]; 177 arr = [NSArray arrayWithObject:globStr]; 178} 179 180@interface Custom : NSObject 181- (id)objectAtIndex:(unsigned long)index; 182@end 183 184@interface Custom (Extended) 185- (id)objectAtIndexedSubscript:(unsigned)idx; 186@end 187 188@interface MutableCustom : Custom 189- (void)replaceObjectAtIndex:(unsigned long)index withObject:(id)anObject; 190@end 191 192@interface MutableCustom (Extended) 193- (void)setObject:(id)obj atIndexedSubscript:(unsigned)idx; 194@end 195 196@interface CustomUnavail : NSObject 197- (id)objectAtIndex:(unsigned long)index; 198@end 199 200@interface CustomUnavail (Extended) 201- (id)objectAtIndexedSubscript:(unsigned)idx __attribute__((unavailable)); 202@end 203 204@interface MutableCustomUnavail : CustomUnavail 205- (void)replaceObjectAtIndex:(unsigned long)index withObject:(id)anObject; 206@end 207 208@interface MutableCustomUnavail (Extended) 209- (void)setObject:(id)obj atIndexedSubscript:(unsigned)idx __attribute__((unavailable)); 210@end 211 212void test2() { 213 MutableCustom *mutc; 214 id o = [mutc objectAtIndex:4]; 215 [mutc replaceObjectAtIndex:2 withObject:@"val"]; 216 217 MutableCustomUnavail *mutcunaval; 218 o = [mutcunaval objectAtIndex:4]; 219 [mutcunaval replaceObjectAtIndex:2 withObject:@"val"]; 220} 221 222@interface NSLocale : NSObject 223+ (id)systemLocale; 224+ (id)currentLocale; 225- (id)objectForKey:(id)key; 226@end 227 228void test3(id key) { 229 id o = [[NSLocale currentLocale] objectForKey:key]; 230} 231