1 | // RUN: %clang_cc1 -emit-llvm %s -o %t |
2 | |
3 | void p(const char*, ...); |
4 | |
5 | @interface NSArray |
6 | +(NSArray*) arrayWithObjects: (id) first, ...; |
7 | -(unsigned) count; |
8 | @end |
9 | @interface NSString |
10 | -(const char*) cString; |
11 | @end |
12 | |
13 | #define S(n) @#n |
14 | #define L1(n) S(n+0),S(n+1) |
15 | #define L2(n) L1(n+0),L1(n+2) |
16 | #define L3(n) L2(n+0),L2(n+4) |
17 | #define L4(n) L3(n+0),L3(n+8) |
18 | #define L5(n) L4(n+0),L4(n+16) |
19 | #define L6(n) L5(n+0),L5(n+32) |
20 | |
21 | void t0() { |
22 | NSArray *array = [NSArray arrayWithObjects: L1(0), (void*)0]; |
23 | |
24 | p("array.length: %d\n", [array count]); |
25 | unsigned index = 0; |
26 | for (NSString *i in array) { // expected-warning {{collection expression type 'NSArray *' may not respond}} |
27 | p("element %d: %s\n", index++, [i cString]); |
28 | } |
29 | } |
30 | |
31 | void t1() { |
32 | NSArray *array = [NSArray arrayWithObjects: L6(0), (void*)0]; |
33 | |
34 | p("array.length: %d\n", [array count]); |
35 | unsigned index = 0; |
36 | for (NSString *i in array) { // expected-warning {{collection expression type 'NSArray *' may not respond}} |
37 | index++; |
38 | if (index == 10) |
39 | continue; |
40 | p("element %d: %s\n", index, [i cString]); |
41 | if (index == 55) |
42 | break; |
43 | } |
44 | } |
45 | |
46 | // rdar://problem/9027663 |
47 | void t2(NSArray *array) { |
48 | for (NSArray *array in array) { // expected-warning {{collection expression type 'NSArray *' may not respond}} |
49 | } |
50 | } |
51 | |