1 | // RUN: %clang_cc1 -triple arm64-apple-darwin -S -emit-llvm -o - -O2 -disable-llvm-passes %s | FileCheck %s |
2 | // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -S -emit-llvm -o - -O2 -disable-llvm-passes %s | FileCheck %s |
3 | // RUN: %clang_cc1 -triple arm64-apple-darwin -fobjc-arc -S -emit-llvm -o - -O2 -disable-llvm-passes %s | FileCheck %s --check-prefixes=CHECK,ARC |
4 | // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-arc -S -emit-llvm -o - -O2 -disable-llvm-passes %s | FileCheck %s --check-prefixes=CHECK,ARC |
5 | |
6 | struct stret { int x[100]; }; |
7 | struct stret one = {{1}}; |
8 | |
9 | @interface Test |
10 | +(struct stret) method; |
11 | +(struct stret) methodConsuming:(id __attribute__((ns_consumed)))consumed; |
12 | @end |
13 | |
14 | void foo(id o, id p) { |
15 | [o method]; |
16 | // CHECK: @llvm.lifetime.start |
17 | // CHECK: call void bitcast {{.*}} @objc_msgSend |
18 | // CHECK: @llvm.lifetime.end |
19 | // CHECK-NOT: call void @llvm.memset |
20 | |
21 | [o methodConsuming:p]; |
22 | // ARC: [[T0:%.*]] = icmp eq i8* |
23 | // ARC: br i1 [[T0]] |
24 | |
25 | // CHECK: @llvm.lifetime.start |
26 | // CHECK: call void bitcast {{.*}} @objc_msgSend |
27 | // CHECK: @llvm.lifetime.end |
28 | // ARC: br label |
29 | |
30 | // ARC: call void @llvm.objc.release |
31 | // ARC: br label |
32 | |
33 | // CHECK-NOT: call void @llvm.memset |
34 | } |
35 | |