Home | History | Annotate | Download | only in SemaObjC
      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