45 lines · plain
1// RUN: %clang_cc1 -triple arm64-apple-ios11 -fobjc-arc -emit-llvm -o - %s | FileCheck %s2 3@class I;4 5typedef struct {6 I *name;7} Foo;8 9typedef struct {10 Foo foo;11} Bar;12 13typedef struct {14 Bar bar;15} Baz;16 17I *getI(void);18 19void f(void) {20 Foo foo = {getI()};21 Bar bar = {foo};22 Baz baz = {bar};23}24 25// CHECK: define linkonce_odr hidden void @__destructor_8_S_S_s0(ptr noundef %[[DST:.*]])26// CHECK: %[[DST_ADDR:.*]] = alloca ptr, align 827// CHECK: store ptr %[[DST]], ptr %[[DST_ADDR]], align 828// CHECK: %[[V0:.*]] = load ptr, ptr %[[DST_ADDR]], align 829// CHECK: call void @__destructor_8_S_s0(ptr %[[V0]])30// CHECK: ret void31 32// CHECK: define linkonce_odr hidden void @__destructor_8_S_s0(ptr noundef %[[DST:.*]])33// CHECK: %[[DST_ADDR:.*]] = alloca ptr, align 834// CHECK: store ptr %[[DST]], ptr %[[DST_ADDR]], align 835// CHECK: %[[V0:.*]] = load ptr, ptr %[[DST_ADDR]], align 836// CHECK: call void @__destructor_8_s0(ptr %[[V0]])37// CHECK: ret void38 39// CHECK: define linkonce_odr hidden void @__destructor_8_s0(ptr noundef %dst)40// CHECK: %[[DST_ADDR:.*]] = alloca ptr, align 841// CHECK: store ptr %[[DST]], ptr %[[DST_ADDR]], align 842// CHECK: %[[V0:.*]] = load ptr, ptr %[[DST_ADDR]], align 843// CHECK: call void @llvm.objc.storeStrong(ptr %[[V0]], ptr null)44// CHECK: ret void45