xref: /aosp_15_r20/external/clang/test/SemaObjC/sign-conversion.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
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