1*67e74705SXin Li// RUN: %clang_cc1 -emit-llvm -triple x86_64-apple-darwin -o - %s | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Litypedef unsigned int size_t; 4*67e74705SXin Li@protocol P @end 5*67e74705SXin Li@protocol NSCopying @end 6*67e74705SXin Li 7*67e74705SXin Li@interface NSMutableArray 8*67e74705SXin Li- (id)objectAtIndexedSubscript:(size_t)index; 9*67e74705SXin Li- (void)setObject:(id)object atIndexedSubscript:(size_t)index; 10*67e74705SXin Li@end 11*67e74705SXin Li 12*67e74705SXin Listruct S { 13*67e74705SXin Li operator unsigned int (); 14*67e74705SXin Li operator id (); 15*67e74705SXin Li}; 16*67e74705SXin Li 17*67e74705SXin Li@interface NSMutableDictionary 18*67e74705SXin Li- (id)objectForKeyedSubscript:(id<NSCopying>)key; 19*67e74705SXin Li- (void)setObject:(id)object forKeyedSubscript:(id<NSCopying>)key; 20*67e74705SXin Li@end 21*67e74705SXin Li 22*67e74705SXin Liint main() { 23*67e74705SXin Li NSMutableArray<P> * array; 24*67e74705SXin Li S s; 25*67e74705SXin Li id oldObject = array[(int)s]; 26*67e74705SXin Li 27*67e74705SXin Li NSMutableDictionary<P> *dict; 28*67e74705SXin Li dict[(id)s] = oldObject; 29*67e74705SXin Li oldObject = dict[(id)s]; 30*67e74705SXin Li 31*67e74705SXin Li} 32*67e74705SXin Li 33*67e74705SXin Litemplate <class T> void test2(NSMutableArray *a) { 34*67e74705SXin Li a[10] = 0; 35*67e74705SXin Li} 36*67e74705SXin Litemplate void test2<int>(NSMutableArray*); 37*67e74705SXin Li// CHECK-LABEL: define weak_odr void @_Z5test2IiEvP14NSMutableArray 38*67e74705SXin Li// CHECK: @objc_msgSend 39*67e74705SXin Li// CHECK: ret void 40*67e74705SXin Li 41*67e74705SXin Li 42*67e74705SXin Litemplate <class T> void test3(NSMutableArray *a) { 43*67e74705SXin Li a[sizeof(T)] = 0; 44*67e74705SXin Li} 45*67e74705SXin Li 46*67e74705SXin Litemplate void test3<int>(NSMutableArray*); 47*67e74705SXin Li// CHECK-LABEL: define weak_odr void @_Z5test3IiEvP14NSMutableArray 48*67e74705SXin Li// CHECK: @objc_msgSend 49*67e74705SXin Li// CHECK: ret void 50*67e74705SXin Li 51