// RUN: rm -rf %t // RUN: %clang_cc1 -objcmt-migrate-instancetype -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 // RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result // RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result typedef signed char BOOL; #define nil ((void*) 0) @interface NSObject + (id)alloc; @end @interface NSString : NSObject + (instancetype)stringWithString:(NSString *)string; - (instancetype)initWithString:(NSString *)aString; @end @implementation NSString : NSObject + (instancetype)stringWithString:(NSString *)string { return 0; }; - (instancetype)initWithString:(NSString *)aString { return 0; }; @end @interface NSArray : NSObject - (id)objectAtIndex:(unsigned long)index; - (id)objectAtIndexedSubscript:(int)index; @end @interface NSArray (NSArrayCreation) + (instancetype)array; + (instancetype)arrayWithObject:(id)anObject; + (instancetype)arrayWithObjects:(const id [])objects count:(unsigned long)cnt; + (instancetype)arrayWithObjects:(id)firstObj, ...; + (instancetype) arrayWithArray:(NSArray *)array; - (instancetype)initWithObjects:(const id [])objects count:(unsigned long)cnt; - (instancetype)initWithObjects:(id)firstObj, ...; - (instancetype)initWithArray:(NSArray *)array; - (id)objectAtIndex:(unsigned long)index; @end @implementation NSArray (NSArrayCreation) + (instancetype)array { return 0; } + (instancetype)arrayWithObject:(id)anObject { return anObject; } + (instancetype)arrayWithObjects:(const id [])objects count:(unsigned long)cnt { return 0; } + (instancetype)arrayWithObjects:(id)firstObj, ... { return 0; } + (instancetype) arrayWithArray:(NSArray *)array { return 0; } - (instancetype)initWithObjects:(const id [])objects count:(unsigned long)cnt { return 0; } - (instancetype)initWithObjects:(id)firstObj, ... { return 0; } - (instancetype)initWithArray:(NSArray *)array { return 0; } - (id)objectAtIndex:(unsigned long)index { return 0; } @end @interface NSMutableArray : NSArray - (void)replaceObjectAtIndex:(unsigned long)index withObject:(id)anObject; - (void)setObject:(id)object atIndexedSubscript:(int)index; @end @interface NSDictionary : NSObject - (id)objectForKeyedSubscript:(id)key; @end @interface NSDictionary (NSDictionaryCreation) + (instancetype)dictionary; + (instancetype)dictionaryWithObject:(id)object forKey:(id)key; + (instancetype)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; + (instancetype) dictionaryWithObjectsAndKeys:(id)firstObject, ...; + (instancetype)dictionaryWithDictionary:(NSDictionary *)dict; + (instancetype)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; - (instancetype)initWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; - (instancetype)initWithObjectsAndKeys:(id)firstObject, ...; - (instancetype)initWithDictionary:(NSDictionary *)otherDictionary; - (instancetype)initWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; - (id)objectForKey:(id)aKey; @end @interface NSMutableDictionary : NSDictionary - (void)setObject:(id)anObject forKey:(id)aKey; - (void)setObject:(id)object forKeyedSubscript:(id)key; @end @interface NSNumber : NSObject @end @interface NSNumber (NSNumberCreation) + (NSNumber *)numberWithInt:(int)value; @end @implementation NSNumber (NSNumberCreation) + (NSNumber *)numberWithInt:(int)value { return 0; } @end #define M(x) (x) #define PAIR(x) @#x, [NSNumber numberWithInt:(x)] #define TWO(x) ((x), (x)) void foo(void) { NSString *str = M([NSString stringWithString:@"foo"]); // expected-warning {{redundant}} str = [[NSString alloc] initWithString:@"foo"]; // expected-warning {{redundant}} NSArray *arr = [NSArray arrayWithArray:@[str]]; // expected-warning {{redundant}} NSDictionary *dict = [NSDictionary dictionaryWithDictionary:@{str: arr}]; // expected-warning {{redundant}} }