Mercurial > hg > CbC > CbC_llvm
diff clang/test/SemaObjCXX/foreach.mm @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/clang/test/SemaObjCXX/foreach.mm Thu Feb 13 15:10:13 2020 +0900 @@ -0,0 +1,82 @@ +// RUN: %clang_cc1 -fsyntax-only -fblocks -verify -std=c++11 %s +// rdar://9293227 + +@class NSArray; + +void f(NSArray *a) { + id keys; + for (int i : a); // expected-error{{selector element type 'int' is not a valid object}} + for ((id)2 : a); // expected-error {{for range declaration must declare a variable}} + for (2 : a); // expected-error {{for range declaration must declare a variable}} + + for (id thisKey : keys); + + for (auto thisKey : keys) { } // expected-warning{{'auto' deduced as 'id' in declaration of 'thisKey'}} +} + +void for_init_stmt() { + for (id keys; id key : keys) {} // expected-warning{{extension}} expected-error{{not supported}} +} +template<typename T> void for_init_stmt_tmpl() { + for (T keys; id key : keys) {} // expected-warning{{extension}} expected-error{{not supported}} +} +template void for_init_stmt_tmpl<id>(); // expected-note {{in instantiation of}} + +template<typename Collection> +void ft(Collection col) { + for (id x : col) { } + for (auto x : col) { } +} + +template void ft(NSArray *); + +/* // rdar://9072298 */ +@protocol NSObject @end + +@interface NSObject <NSObject> { + Class isa; +} +@end + +typedef struct { + unsigned long state; + id *itemsPtr; + unsigned long *mutationsPtr; + unsigned long extra[5]; +} NSFastEnumerationState; + +@protocol NSFastEnumeration + +- (unsigned long)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(unsigned long)len; + +@end + +int main () +{ + NSObject<NSFastEnumeration>* collection = 0; + for (id thing : collection) { } + + id array; + for (int (^b)(void) : array) { + if (b() == 10000) { + return 1; + } + } + return 0; +} + +/* rdar://problem/11068137 */ +@interface Test2 +@property (assign) id prop; +@end +void test2(NSObject<NSFastEnumeration> *collection) { + Test2 *obj; + for (obj.prop : collection) { // expected-error {{for range declaration must declare a variable}} + } +} + +void testErrors(NSArray *array) { + typedef int fn(int); + + for (fn x in array) { } // expected-error{{non-variable declaration in 'for' loop}} +}