xref: /llvm-project/clang/test/CodeGenObjCXX/objc-container-subscripting-1.mm (revision 4362261b0093730e46ffcad910e8b465cf0bb1cb)
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