1 // RUN: %clang_cc1 -emit-llvm -o - -O2 -disable-llvm-passes %s | FileCheck %s --implicit-check-not="call void @llvm.lifetime" --check-prefixes=CHECK,O2
2 // RUN: %clang_cc1 -emit-llvm -o - -O2 -disable-lifetime-markers %s | FileCheck %s --implicit-check-not="call void @llvm.lifetime" --check-prefixes=CHECK
3 // RUN: %clang_cc1 -emit-llvm -o - -O0 %s | FileCheck %s --implicit-check-not="call void @llvm.lifetime" --check-prefixes=CHECK
4
5 extern int bar(char *A, int n);
6
7 // CHECK-LABEL: @no_switch_bypass
no_switch_bypass(int n)8 extern "C" void no_switch_bypass(int n) {
9 // O2: call void @llvm.lifetime.start.p0(i64 4,
10 switch (n += 1; int b=n) {
11 case 1: {
12 // O2: call void @llvm.lifetime.start.p0(i64 1,
13 // O2: call void @llvm.lifetime.end.p0(i64 1,
14 char x;
15 bar(&x, 1);
16 break;
17 }
18 case 2:
19 n = n;
20 // O2: call void @llvm.lifetime.start.p0(i64 5,
21 // O2: call void @llvm.lifetime.end.p0(i64 5,
22 char y[5];
23 bar(y, 5);
24 break;
25 }
26 // O2: call void @llvm.lifetime.end.p0(i64 4,
27 }
28
29 // CHECK-LABEL: @switch_bypass
switch_bypass(int n)30 extern "C" void switch_bypass(int n) {
31 // O2: call void @llvm.lifetime.start.p0(i64 4,
32 // O2: call void @llvm.lifetime.end.p0(i64 4,
33 switch (n += 1; int b=n) {
34 case 1:
35 n = n;
36 char x;
37 bar(&x, 1);
38 break;
39 case 2:
40 bar(&x, 1);
41 break;
42 }
43 }
44