252
|
1 // RUN: %clang_cc1 -triple arm64-apple-ios11 -fobjc-arc -emit-llvm -o - %s | FileCheck %s
|
150
|
2
|
|
3 @class I;
|
|
4
|
|
5 typedef struct {
|
|
6 I *name;
|
|
7 } Foo;
|
|
8
|
|
9 typedef struct {
|
|
10 Foo foo;
|
|
11 } Bar;
|
|
12
|
|
13 typedef struct {
|
|
14 Bar bar;
|
|
15 } Baz;
|
|
16
|
236
|
17 I *getI(void);
|
150
|
18
|
236
|
19 void f(void) {
|
150
|
20 Foo foo = {getI()};
|
|
21 Bar bar = {foo};
|
|
22 Baz baz = {bar};
|
|
23 }
|
|
24
|
252
|
25 // CHECK: define linkonce_odr hidden void @__destructor_8_S_S_s0(ptr noundef %[[DST:.*]])
|
|
26 // CHECK: %[[DST_ADDR:.*]] = alloca ptr, align 8
|
|
27 // CHECK: store ptr %[[DST]], ptr %[[DST_ADDR]], align 8
|
|
28 // CHECK: %[[V0:.*]] = load ptr, ptr %[[DST_ADDR]], align 8
|
|
29 // CHECK: call void @__destructor_8_S_s0(ptr %[[V0]])
|
150
|
30 // CHECK: ret void
|
|
31
|
252
|
32 // CHECK: define linkonce_odr hidden void @__destructor_8_S_s0(ptr noundef %[[DST:.*]])
|
|
33 // CHECK: %[[DST_ADDR:.*]] = alloca ptr, align 8
|
|
34 // CHECK: store ptr %[[DST]], ptr %[[DST_ADDR]], align 8
|
|
35 // CHECK: %[[V0:.*]] = load ptr, ptr %[[DST_ADDR]], align 8
|
|
36 // CHECK: call void @__destructor_8_s0(ptr %[[V0]])
|
150
|
37 // CHECK: ret void
|
|
38
|
252
|
39 // CHECK: define linkonce_odr hidden void @__destructor_8_s0(ptr noundef %dst)
|
|
40 // CHECK: %[[DST_ADDR:.*]] = alloca ptr, align 8
|
|
41 // CHECK: store ptr %[[DST]], ptr %[[DST_ADDR]], align 8
|
|
42 // CHECK: %[[V0:.*]] = load ptr, ptr %[[DST_ADDR]], align 8
|
|
43 // CHECK: call void @llvm.objc.storeStrong(ptr %[[V0]], ptr null)
|
150
|
44 // CHECK: ret void
|