]> git.lizzy.rs Git - rust.git/blob - src/test/codegen/lifetime_start_end.rs
Rollup merge of #69609 - TimDiekmann:excess, r=Amanieu
[rust.git] / src / test / codegen / lifetime_start_end.rs
1 // compile-flags: -O -C no-prepopulate-passes
2
3 #![crate_type = "lib"]
4
5 // CHECK-LABEL: @test
6 #[no_mangle]
7 pub fn test() {
8     let a = 0;
9     &a; // keep variable in an alloca
10
11 // CHECK: [[S_a:%[0-9]+]] = bitcast i32* %a to i8*
12 // CHECK: call void @llvm.lifetime.start{{.*}}(i{{[0-9 ]+}}, i8* [[S_a]])
13
14     {
15         let b = &Some(a);
16         &b; // keep variable in an alloca
17
18 // CHECK: [[S_b:%[0-9]+]] = bitcast { i32, i32 }** %b to i8*
19 // CHECK: call void @llvm.lifetime.start{{.*}}(i{{[0-9 ]+}}, i8* [[S_b]])
20
21 // CHECK: [[S__4:%[0-9]+]] = bitcast { i32, i32 }* %_4 to i8*
22 // CHECK: call void @llvm.lifetime.start{{.*}}(i{{[0-9 ]+}}, i8* [[S__4]])
23
24 // CHECK: [[E__4:%[0-9]+]] = bitcast { i32, i32 }* %_4 to i8*
25 // CHECK: call void @llvm.lifetime.end{{.*}}(i{{[0-9 ]+}}, i8* [[E__4]])
26
27 // CHECK: [[E_b:%[0-9]+]] = bitcast { i32, i32 }** %b to i8*
28 // CHECK: call void @llvm.lifetime.end{{.*}}(i{{[0-9 ]+}}, i8* [[E_b]])
29     }
30
31     let c = 1;
32     &c; // keep variable in an alloca
33
34 // CHECK: [[S_c:%[0-9]+]] = bitcast i32* %c to i8*
35 // CHECK: call void @llvm.lifetime.start{{.*}}(i{{[0-9 ]+}}, i8* [[S_c]])
36
37 // CHECK: [[E_c:%[0-9]+]] = bitcast i32* %c to i8*
38 // CHECK: call void @llvm.lifetime.end{{.*}}(i{{[0-9 ]+}}, i8* [[E_c]])
39
40 // CHECK: [[E_a:%[0-9]+]] = bitcast i32* %a to i8*
41 // CHECK: call void @llvm.lifetime.end{{.*}}(i{{[0-9 ]+}}, i8* [[E_a]])
42 }