1 | // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-gc -emit-llvm -o - %s | FileCheck -check-prefix CHECK-LP64 %s |
2 | // RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin10 -fobjc-gc -emit-llvm -o - %s | FileCheck -check-prefix CHECK-LP64 %s |
3 | // rdar: // 7849824 |
4 | // <rdar://problem/12547611> |
5 | |
6 | struct s { |
7 | double a, b, c, d; |
8 | }; |
9 | |
10 | struct s1 { |
11 | int i; |
12 | id j; |
13 | id k; |
14 | }; |
15 | |
16 | struct s2 {}; |
17 | |
18 | @interface A |
19 | @property (readwrite) double x; |
20 | @property (readwrite) struct s y; |
21 | @property (nonatomic, readwrite) struct s1 z; |
22 | @property (readwrite) struct s2 a; |
23 | @end |
24 | |
25 | @implementation A |
26 | @synthesize x; |
27 | @synthesize y; |
28 | @synthesize z; |
29 | @synthesize a; |
30 | @end |
31 | // CHECK-LP64: define internal double @"\01-[A x]"( |
32 | // CHECK-LP64: load atomic i64, i64* {{%.*}} unordered, align 8 |
33 | |
34 | // CHECK-LP64: define internal void @"\01-[A setX:]"( |
35 | // CHECK-LP64: store atomic i64 {{%.*}}, i64* {{%.*}} unordered, align 8 |
36 | |
37 | // CHECK-LP64: define internal void @"\01-[A y]"( |
38 | // CHECK-LP64: call void @objc_copyStruct(i8* {{%.*}}, i8* {{%.*}}, i64 32, i1 zeroext true, i1 zeroext false) |
39 | |
40 | // CHECK-LP64: define internal void @"\01-[A setY:]"( |
41 | // CHECK-LP64: call void @objc_copyStruct(i8* {{%.*}}, i8* {{%.*}}, i64 32, i1 zeroext true, i1 zeroext false) |
42 | |
43 | // CHECK-LP64: define internal void @"\01-[A z]"( |
44 | // CHECK-LP64: call i8* @objc_memmove_collectable( |
45 | |
46 | // CHECK-LP64: define internal void @"\01-[A setZ:]"( |
47 | // CHECK-LP64: call i8* @objc_memmove_collectable( |
48 | |
49 | // CHECK-LP64: define internal void @"\01-[A a]"( |
50 | // (do nothing) |
51 | |
52 | // CHECK-LP64: define internal void @"\01-[A setA:]"( |
53 | // (do nothing) |
54 | |