150
|
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 }
|