1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar/* RUN: %clang_cc1 -Wall -fsyntax-only -verify -std=c89 -pedantic %s 24d00f2a5a9b670cd0d67d640a42dbf7b9f342c59Chris Lattner */ 31fe379f0fa6fbc0a6057e8966253aea2957ca953Anders Carlsson 41fe379f0fa6fbc0a6057e8966253aea2957ca953Anders Carlsson@class NSArray; 51fe379f0fa6fbc0a6057e8966253aea2957ca953Anders Carlsson 64d00f2a5a9b670cd0d67d640a42dbf7b9f342c59Chris Lattnervoid f(NSArray *a) { 74d00f2a5a9b670cd0d67d640a42dbf7b9f342c59Chris Lattner id keys; 84d00f2a5a9b670cd0d67d640a42dbf7b9f342c59Chris Lattner for (int i in a); /* expected-error{{selector element type 'int' is not a valid object}} */ 94d00f2a5a9b670cd0d67d640a42dbf7b9f342c59Chris Lattner for ((id)2 in a); /* expected-error{{selector element is not a valid lvalue}} */ 104d00f2a5a9b670cd0d67d640a42dbf7b9f342c59Chris Lattner for (2 in a); /* expected-error{{selector element is not a valid lvalue}} */ 114d00f2a5a9b670cd0d67d640a42dbf7b9f342c59Chris Lattner 124d00f2a5a9b670cd0d67d640a42dbf7b9f342c59Chris Lattner /* This should be ok, 'thisKey' should be scoped to the loop in question, 134d00f2a5a9b670cd0d67d640a42dbf7b9f342c59Chris Lattner * and no diagnostics even in pedantic mode should happen. 144d00f2a5a9b670cd0d67d640a42dbf7b9f342c59Chris Lattner * rdar://6814674 154d00f2a5a9b670cd0d67d640a42dbf7b9f342c59Chris Lattner */ 16bdf3d9ad85ef09544d14db0e848a01c7df9cb028Fariborz Jahanian for (id thisKey in keys); /* expected-warning {{unused variable 'thisKey'}} */ 17bdf3d9ad85ef09544d14db0e848a01c7df9cb028Fariborz Jahanian for (id thisKey in keys); /* expected-warning {{unused variable 'thisKey'}} */ 18d162584991885ab004a02573a73ce06422b921fcChris Lattner} 1961478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian 2061478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian/* // rdar://9072298 */ 2161478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian@protocol NSObject @end 2261478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian 2361478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian@interface NSObject <NSObject> { 2461478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian Class isa; 2561478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian} 2661478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian@end 2761478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian 2861478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahaniantypedef struct { 2961478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian unsigned long state; 3061478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian id *itemsPtr; 3161478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian unsigned long *mutationsPtr; 3261478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian unsigned long extra[5]; 3361478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian} NSFastEnumerationState; 3461478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian 3561478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian@protocol NSFastEnumeration 3661478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian 3761478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian- (unsigned long)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(unsigned long)len; 3861478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian 3961478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian@end 4061478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian 4161478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanianint main () 4261478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian{ 4361478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian NSObject<NSFastEnumeration>* collection = ((void*)0); 44bdf3d9ad85ef09544d14db0e848a01c7df9cb028Fariborz Jahanian for (id thing in collection) { } /* expected-warning {{unused variable 'thing'}} */ 4561478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian 4661478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian return 0; 4761478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian} 4861478065fbcafcf5295bb0fb796c9a92f2d861e0Fariborz Jahanian 4929bbd1a33edfd3c81c35d5076530c2867a05bddcJohn McCall/* rdar://problem/11068137 */ 5029bbd1a33edfd3c81c35d5076530c2867a05bddcJohn McCall@interface Test2 5129bbd1a33edfd3c81c35d5076530c2867a05bddcJohn McCall@property (assign) id prop; 5229bbd1a33edfd3c81c35d5076530c2867a05bddcJohn McCall@end 5329bbd1a33edfd3c81c35d5076530c2867a05bddcJohn McCallvoid test2(NSObject<NSFastEnumeration> *collection) { 5429bbd1a33edfd3c81c35d5076530c2867a05bddcJohn McCall Test2 *obj; 5529bbd1a33edfd3c81c35d5076530c2867a05bddcJohn McCall for (obj.prop in collection) { /* expected-error {{selector element is not a valid lvalue}} */ 5629bbd1a33edfd3c81c35d5076530c2867a05bddcJohn McCall } 5729bbd1a33edfd3c81c35d5076530c2867a05bddcJohn McCall} 58