• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
6struct stret { int x[100]; };
7struct stret one = {{1}};
8
9@interface Test
10+(struct stret) method;
11+(struct stret) methodConsuming:(id __attribute__((ns_consumed)))consumed;
12@end
13
14void 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