diff options
Diffstat (limited to 'clang/test/CodeGenObjC/for-in.m')
-rw-r--r-- | clang/test/CodeGenObjC/for-in.m | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/clang/test/CodeGenObjC/for-in.m b/clang/test/CodeGenObjC/for-in.m new file mode 100644 index 0000000..26fe792 --- /dev/null +++ b/clang/test/CodeGenObjC/for-in.m @@ -0,0 +1,50 @@ +// RUN: %clang_cc1 -emit-llvm %s -o %t + +void p(const char*, ...); + +@interface NSArray ++(NSArray*) arrayWithObjects: (id) first, ...; +-(unsigned) count; +@end +@interface NSString +-(const char*) cString; +@end + +#define S(n) @#n +#define L1(n) S(n+0),S(n+1) +#define L2(n) L1(n+0),L1(n+2) +#define L3(n) L2(n+0),L2(n+4) +#define L4(n) L3(n+0),L3(n+8) +#define L5(n) L4(n+0),L4(n+16) +#define L6(n) L5(n+0),L5(n+32) + +void t0() { + NSArray *array = [NSArray arrayWithObjects: L1(0), (void*)0]; + + p("array.length: %d\n", [array count]); + unsigned index = 0; + for (NSString *i in array) { // expected-warning {{collection expression type 'NSArray *' may not respond}} + p("element %d: %s\n", index++, [i cString]); + } +} + +void t1() { + NSArray *array = [NSArray arrayWithObjects: L6(0), (void*)0]; + + p("array.length: %d\n", [array count]); + unsigned index = 0; + for (NSString *i in array) { // expected-warning {{collection expression type 'NSArray *' may not respond}} + index++; + if (index == 10) + continue; + p("element %d: %s\n", index, [i cString]); + if (index == 55) + break; + } +} + +// rdar://problem/9027663 +void t2(NSArray *array) { + for (NSArray *array in array) { // expected-warning {{collection expression type 'NSArray *' may not respond}} + } +} |