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 6*67e74705SXin Li@interface NSMutableArray 7*67e74705SXin Li- (id)objectAtIndexedSubscript:(size_t)index; 8*67e74705SXin Li- (void)setObject:(id)object atIndexedSubscript:(size_t)index; 9*67e74705SXin Li@end 10*67e74705SXin Li 11*67e74705SXin Listruct S { 12*67e74705SXin Li operator unsigned int (); 13*67e74705SXin Li operator id (); 14*67e74705SXin Li}; 15*67e74705SXin Li 16*67e74705SXin Li@interface NSMutableDictionary 17*67e74705SXin Li- (id)objectForKeyedSubscript:(id)key; 18*67e74705SXin Li- (void)setObject:(id)object forKeyedSubscript:(id)key; 19*67e74705SXin Li@end 20*67e74705SXin Li 21*67e74705SXin Liint main() { 22*67e74705SXin Li NSMutableArray<P> * array; 23*67e74705SXin Li S s; 24*67e74705SXin Li id oldObject = array[(int)s]; 25*67e74705SXin Li 26*67e74705SXin Li NSMutableDictionary<P> *dict; 27*67e74705SXin Li dict[(id)s] = oldObject; 28*67e74705SXin Li oldObject = dict[(id)s]; 29*67e74705SXin Li 30*67e74705SXin Li} 31*67e74705SXin Li 32*67e74705SXin Litemplate <class T> void test2(NSMutableArray *a) { 33*67e74705SXin Li a[10] = 0; 34*67e74705SXin Li} 35*67e74705SXin Litemplate void test2<int>(NSMutableArray*); 36*67e74705SXin Li// CHECK-LABEL: define weak_odr void @_Z5test2IiEvP14NSMutableArray 37*67e74705SXin Li// CHECK: @objc_msgSend 38*67e74705SXin Li// CHECK: ret void 39*67e74705SXin Li 40*67e74705SXin Li 41*67e74705SXin Litemplate <class T> void test3(NSMutableArray *a) { 42*67e74705SXin Li a[sizeof(T)] = 0; 43*67e74705SXin Li} 44*67e74705SXin Li 45*67e74705SXin Litemplate void test3<int>(NSMutableArray*); 46*67e74705SXin Li// CHECK-LABEL: define weak_odr void @_Z5test3IiEvP14NSMutableArray 47*67e74705SXin Li// CHECK: @objc_msgSend 48*67e74705SXin Li// CHECK: ret void 49*67e74705SXin Li 50*67e74705SXin Li// CHECK-LABEL: define void @_Z11static_dataP14NSMutableArray 51*67e74705SXin Livoid static_data(NSMutableArray *array) { 52*67e74705SXin Li // CHECK: call i32 @__cxa_guard_acquire 53*67e74705SXin Li // CHECK: {{call i8*.*@objc_msgSend }} 54*67e74705SXin Li // CHECK: call void @__cxa_guard_release 55*67e74705SXin Li static id x = array[4]; 56*67e74705SXin Li // CHECK: ret void 57*67e74705SXin Li} 58