Home | History | Annotate | Download | only in CodeGenObjC
      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