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