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