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