blob: dfe48e9d6dc891f9c5f9e2c551b3d6bbca74f539 [file] [log] [blame]
Ted Kremenekebcb57a2012-03-06 20:05:56 +00001// RUN: %clang_cc1 -emit-llvm -triple x86_64-apple-darwin -o - %s | FileCheck %s
2
3typedef unsigned int size_t;
4@protocol P @end
5
6@interface NSMutableArray
7- (id)objectAtIndexedSubscript:(size_t)index;
8- (void)setObject:(id)object atIndexedSubscript:(size_t)index;
9@end
10
11struct S {
12 operator unsigned int ();
13 operator id ();
14};
15
16@interface NSMutableDictionary
17- (id)objectForKeyedSubscript:(id)key;
18- (void)setObject:(id)object forKeyedSubscript:(id)key;
19@end
20
21int main() {
22 NSMutableArray<P> * array;
23 S s;
24 id oldObject = array[(int)s];
25
26 NSMutableDictionary<P> *dict;
27 dict[(id)s] = oldObject;
28 oldObject = dict[(id)s];
29
30}
31
32template <class T> void test2(NSMutableArray *a) {
33 a[10] = 0;
34}
35template void test2<int>(NSMutableArray*);
36// CHECK: define weak_odr void @_Z5test2IiEvP14NSMutableArray
37// CHECK: @objc_msgSend
38// CHECK: ret void
39
40
41template <class T> void test3(NSMutableArray *a) {
42 a[sizeof(T)] = 0;
43}
44
45template void test3<int>(NSMutableArray*);
46// CHECK: define weak_odr void @_Z5test3IiEvP14NSMutableArray
47// CHECK: @objc_msgSend
48// CHECK: ret void
49
50// CHECK: define void @_Z11static_dataP14NSMutableArray
51void static_data(NSMutableArray *array) {
52 // CHECK: call i32 @__cxa_guard_acquire
53 // CHECK: {{call i8*.*@objc_msgSend }}
54 // CHECK: call void @__cxa_guard_release
55 static id x = array[4];
56 // CHECK: ret void
57}