xref: /llvm-project/clang/test/CodeGenObjC/stret-1.m (revision 158d72d728261c1e54dc77931372b2322c52849f)
1// RUN: %clang_cc1 -fblocks -triple arm64-apple-darwin %s -emit-llvm -o - | FileCheck %s
2
3struct stret { int x[100]; };
4struct stret one = {{1}};
5
6@interface Test  @end
7
8@implementation Test
9+(struct stret) method { return one; }
10@end
11
12int main(int argc, const char **argv)
13{
14    struct stret s;
15    s = [(id)(argc&~255) method];
16    // CHECK: call void @objc_msgSend(ptr dead_on_unwind writable sret(%struct.stret) align 4 [[T0:%[^,]+]]
17    // CHECK: call void @llvm.memset.p0.i64(ptr align 4 [[T0]], i8 0, i64 400, i1 false)
18
19    s = [Test method];
20    // CHECK: call void @objc_msgSend(ptr dead_on_unwind writable sret(%struct.stret) align 4 [[T1:%[^,]+]]
21    // CHECK-NOT: call void @llvm.memset.p0.i64(
22
23    [(id)(argc&~255) method];
24    // CHECK: call void @objc_msgSend(ptr dead_on_unwind writable sret(%struct.stret) align 4 [[T1:%[^,]+]]
25    // CHECK-NOT: call void @llvm.memset.p0.i64(
26
27    [Test method];
28    // CHECK: call void @objc_msgSend(ptr dead_on_unwind writable sret(%struct.stret) align 4 [[T1:%[^,]+]]
29    // CHECK-NOT: call void @llvm.memset.p0.i64(
30}
31