llvm-capstone/clang/test/CodeGenObjC/nontrivial-struct-param-init.m
Akira Hatanaka d8136f14f1 [CodeGen][ObjC] Emit a primitive store to store a __strong field in
ExpandTypeFromArgs

This fixes a bug in IRGen where a call to `llvm.objc.storeStrong` was
being emitted to initialize a __strong field of an uninitialized
temporary struct, which caused crashes at runtime.

rdar://problem/51807365
2019-12-03 23:44:30 -08:00

18 lines
571 B
Objective-C

// RUN: %clang_cc1 -triple i386-apple-watchos6.0-simulator -emit-llvm -fblocks -fobjc-arc -o - %s | FileCheck %s
// CHECK: %[[STRUCT_S:.*]] = type { i8* }
typedef struct {
id x;
} S;
// CHECK: define void @test0(i8* %[[A_0:.*]])
// CHECK: %[[A:.*]] = alloca %[[STRUCT_S]], align 4
// CHECK: %[[X:.*]] = getelementptr inbounds %[[STRUCT_S]], %[[STRUCT_S]]* %[[A]], i32 0, i32 0
// CHECK: store i8* %[[A_0]], i8** %[[X]], align 4
// CHECK: %[[V0:.*]] = bitcast %[[STRUCT_S]]* %[[A]] to i8**
// CHECK: call void @__destructor_4_s0(i8** %[[V0]]) #2
void test0(S a) {
}