80 lines · plain
1// RUN: %clang_cc1 -fsyntax-only -fblocks -verify -std=c++11 %s2 3@class NSArray;4 5void f(NSArray *a) {6 id keys;7 for (int i : a); // expected-error{{selector element type 'int' is not a valid object}} 8 for ((id)2 : a); // expected-error {{for range declaration must declare a variable}}9 for (2 : a); // expected-error {{for range declaration must declare a variable}}10 11 for (id thisKey : keys);12 13 for (auto thisKey : keys) { } // expected-warning{{'auto' deduced as 'id' in declaration of 'thisKey'}}14}15 16void for_init_stmt() {17 for (id keys; id key : keys) {} // expected-warning{{extension}} expected-error{{not supported}}18}19template<typename T> void for_init_stmt_tmpl() {20 for (T keys; id key : keys) {} // expected-warning{{extension}} expected-error{{not supported}}21}22template void for_init_stmt_tmpl<id>(); // expected-note {{in instantiation of}}23 24template<typename Collection>25void ft(Collection col) {26 for (id x : col) { }27 for (auto x : col) { }28}29 30template void ft(NSArray *);31 32@protocol NSObject @end33 34@interface NSObject <NSObject> {35 Class isa;36}37@end38 39typedef struct {40 unsigned long state;41 id *itemsPtr;42 unsigned long *mutationsPtr;43 unsigned long extra[5];44} NSFastEnumerationState;45 46@protocol NSFastEnumeration47 48- (unsigned long)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(unsigned long)len;49 50@end51 52int main ()53{54 NSObject<NSFastEnumeration>* collection = 0;55 for (id thing : collection) { }56 57 id array;58 for (int (^b)(void) : array) {59 if (b() == 10000) {60 return 1;61 }62 }63 return 0;64}65 66@interface Test267@property (assign) id prop;68@end69void test2(NSObject<NSFastEnumeration> *collection) {70 Test2 *obj;71 for (obj.prop : collection) { // expected-error {{for range declaration must declare a variable}}72 }73}74 75void testErrors(NSArray *array) {76 typedef int fn(int);77 78 for (fn x in array) { } // expected-error{{non-variable declaration in 'for' loop}}79}80