1 | // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-arc %s -fsyntax-only -Wobjc-cocoa-api -verify |
2 | // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-arc -x objective-c %s.fixed -fsyntax-only |
3 | // RUN: cp %s %t.m |
4 | // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-arc %t.m -fixit -Wobjc-cocoa-api |
5 | // RUN: diff %s.fixed %t.m |
6 | |
7 | typedef signed char BOOL; |
8 | #define nil ((void*) 0) |
9 | |
10 | @interface NSObject |
11 | + (id)alloc; |
12 | @end |
13 | |
14 | @interface NSString : NSObject |
15 | + (id)stringWithString:(NSString *)string; |
16 | - (id)initWithString:(NSString *)aString; |
17 | @end |
18 | |
19 | @interface NSArray : NSObject |
20 | - (id)objectAtIndex:(unsigned long)index; |
21 | - (id)objectAtIndexedSubscript:(int)index; |
22 | @end |
23 | |
24 | @interface NSArray (NSArrayCreation) |
25 | + (id)array; |
26 | + (id)arrayWithObject:(id)anObject; |
27 | + (id)arrayWithObjects:(const id [])objects count:(unsigned long)cnt; |
28 | + (id)arrayWithObjects:(id)firstObj, ...; |
29 | + (id)arrayWithArray:(NSArray *)array; |
30 | |
31 | - (id)initWithObjects:(const id [])objects count:(unsigned long)cnt; |
32 | - (id)initWithObjects:(id)firstObj, ...; |
33 | - (id)initWithArray:(NSArray *)array; |
34 | |
35 | - (id)objectAtIndex:(unsigned long)index; |
36 | @end |
37 | |
38 | @interface NSMutableArray : NSArray |
39 | - (void)replaceObjectAtIndex:(unsigned long)index withObject:(id)anObject; |
40 | - (void)setObject:(id)object atIndexedSubscript:(int)index; |
41 | @end |
42 | |
43 | @interface NSDictionary : NSObject |
44 | - (id)objectForKeyedSubscript:(id)key; |
45 | @end |
46 | |
47 | @interface NSDictionary (NSDictionaryCreation) |
48 | + (id)dictionary; |
49 | + (id)dictionaryWithObject:(id)object forKey:(id)key; |
50 | + (id)dictionaryWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; |
51 | + (id)dictionaryWithObjectsAndKeys:(id)firstObject, ...; |
52 | + (id)dictionaryWithDictionary:(NSDictionary *)dict; |
53 | + (id)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; |
54 | |
55 | - (id)initWithObjects:(const id [])objects forKeys:(const id [])keys count:(unsigned long)cnt; |
56 | - (id)initWithObjectsAndKeys:(id)firstObject, ...; |
57 | - (id)initWithDictionary:(NSDictionary *)otherDictionary; |
58 | - (id)initWithObjects:(NSArray *)objects forKeys:(NSArray *)keys; |
59 | |
60 | - (id)objectForKey:(id)aKey; |
61 | @end |
62 | |
63 | @interface NSMutableDictionary : NSDictionary |
64 | - (void)setObject:(id)anObject forKey:(id)aKey; |
65 | - (void)setObject:(id)object forKeyedSubscript:(id)key; |
66 | @end |
67 | |
68 | @interface NSNumber : NSObject |
69 | @end |
70 | |
71 | @interface NSNumber (NSNumberCreation) |
72 | + (NSNumber *)numberWithInt:(int)value; |
73 | @end |
74 | |
75 | #define M(x) (x) |
76 | #define PAIR(x) @#x, [NSNumber numberWithInt:(x)] |
77 | #define TWO(x) ((x), (x)) |
78 | |
79 | void foo() { |
80 | NSString *str = M([NSString stringWithString:@"foo"]); // expected-warning {{redundant}} |
81 | str = [[NSString alloc] initWithString:@"foo"]; // expected-warning {{redundant}} |
82 | NSArray *arr = [NSArray arrayWithArray:@[str]]; // expected-warning {{redundant}} |
83 | NSDictionary *dict = [NSDictionary dictionaryWithDictionary:@{str: arr}]; // expected-warning {{redundant}} |
84 | } |
85 | |