1 | // RUN: %clang_cc1 -fsyntax-only -verify -Wsign-conversion %s |
2 | // rdar://13855394 |
3 | |
4 | typedef 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 | |
23 | void 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 |
31 | void Test1() { |
32 | signed int si = -1; |
33 | NSArray *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 | |