1*67e74705SXin Li// RUN: %clang_cc1 -fsyntax-only -verify -Wsign-conversion %s 2*67e74705SXin Li// rdar://13855394 3*67e74705SXin Li 4*67e74705SXin Litypedef unsigned int NSUInteger; 5*67e74705SXin Li 6*67e74705SXin Li@interface NSObject 7*67e74705SXin Li- new; 8*67e74705SXin Li- (NSUInteger)hash; 9*67e74705SXin Li@end 10*67e74705SXin Li 11*67e74705SXin Li@interface X : NSObject 12*67e74705SXin Li@property NSUInteger uint; 13*67e74705SXin Li@end 14*67e74705SXin Li 15*67e74705SXin Li@interface NSArray : NSObject 16*67e74705SXin Li 17*67e74705SXin Li- (NSUInteger)count; 18*67e74705SXin Li- (id)objectAtIndex:(NSUInteger)index; 19*67e74705SXin Li- (id)objectAtIndexedSubscript:(NSUInteger)index; 20*67e74705SXin Li 21*67e74705SXin Li@end 22*67e74705SXin Li 23*67e74705SXin Livoid foo() { 24*67e74705SXin Li X *x = [X new]; 25*67e74705SXin Li signed int sint = -1; 26*67e74705SXin Li [x setUint:sint]; // expected-warning {{implicit conversion changes signedness: 'int' to 'NSUInteger'}} 27*67e74705SXin Li x.uint = sint; // expected-warning {{implicit conversion changes signedness: 'int' to 'NSUInteger'}} 28*67e74705SXin Li} 29*67e74705SXin Li 30*67e74705SXin Li// rdar://13855682 31*67e74705SXin Livoid Test1() { 32*67e74705SXin Lisigned int si = -1; 33*67e74705SXin LiNSArray *array; 34*67e74705SXin Li 35*67e74705SXin Li(void)((NSObject*)array[si]).hash; // expected-warning {{implicit conversion changes signedness: 'int' to 'NSUInteger'}} 36*67e74705SXin Li 37*67e74705SXin Li(void)[((NSObject*)array[si]) hash]; // expected-warning {{implicit conversion changes signedness: 'int' to 'NSUInteger'}} 38*67e74705SXin Li(void)array[si]; // expected-warning {{implicit conversion changes signedness: 'int' to 'NSUInteger'}} 39*67e74705SXin Li} 40