blob: 7921483eeeefefe0e73138c795a14129f6e7e848 [file] [log] [blame]
Vitaly Bukac34b7aa2019-08-24 01:31:38 +00001// RUN: %clang -w -target x86_64-linux-gnu -S -emit-llvm -o - -fno-exceptions -O0 %s | \
2// RUN: FileCheck %s -check-prefixes=CHECK,CHECK-O0 --implicit-check-not=llvm.lifetime
3// RUN: %clang -w -target x86_64-linux-gnu -S -emit-llvm -o - -fno-exceptions -O0 \
4// RUN: -fsanitize=address -fsanitize-address-use-after-scope %s | \
5// RUN: FileCheck %s -check-prefixes=CHECK,LIFETIME
Vitaly Bukaaeca5692019-08-26 22:15:50 +00006// RUN: %clang -w -target x86_64-linux-gnu -S -emit-llvm -o - -fno-exceptions -O0 \
7// RUN: -fsanitize=memory %s | \
8// RUN: FileCheck %s -check-prefixes=CHECK,LIFETIME
Vitaly Bukac34b7aa2019-08-24 01:31:38 +00009
10extern int bar(char *A, int n);
11
12struct X {
13 X();
14 ~X();
15 int *p;
16};
17struct Y {
18 Y();
19 int *p;
20};
21
22extern "C" void a(), b(), c(), d();
23
24// CHECK-LABEL: @_Z3foo
25void foo(int n) {
26 // CHECK-LABEL: call void @a()
27 a();
28
29 // CHECK-LABEL: call void @b()
30 // CHECK: store i1 false
31 // CHECK-LABEL: br i1
32 //
33 // CHECK-LABEL: cond.true:
34 // LIFETIME: @llvm.lifetime.start
35 // LIFETIME: store i1 true
36 // LIFETIME: call void @_ZN1XC
37 // CHECK-LABEL: br label
38 //
39 // CHECK-LABEL: cond.false:
40 // LIFETIME: @llvm.lifetime.start
41 // LIFETIME: store i1 true
42 // LIFETIME: call void @_ZN1YC
43 // CHECK-LABEL: br label
44 //
45 // CHECK-LABEL: cond.end:
46 // CHECK: call void @c()
47 // LIFETIME: @llvm.lifetime.end
48 // LIFETIME: @llvm.lifetime.end
49 b(), (n ? X().p : Y().p), c();
50
51 // CHECK: call void @d()
52 d();
53}