]> git.proxmox.com Git - rustc.git/blob - tests/codegen/issue-86106.rs
New upstream version 1.68.2+dfsg1
[rustc.git] / tests / codegen / issue-86106.rs
1 // min-llvm-version: 15.0
2 // compile-flags: -C opt-level=3 -Z merge-functions=disabled
3
4 // The below two functions ensure that both `String::new()` and `"".to_string()`
5 // produce the identical code.
6
7 #![crate_type = "lib"]
8
9 // CHECK-LABEL: define void @string_new
10 #[no_mangle]
11 pub fn string_new() -> String {
12 // CHECK-NOT: load i8
13 // CHECK: store i{{32|64}}
14 // CHECK-NEXT: getelementptr
15 // CHECK-NEXT: store ptr
16 // CHECK-NEXT: getelementptr
17 // CHECK-NEXT: store i{{32|64}}
18 // CHECK-NEXT: ret void
19 String::new()
20 }
21
22 // CHECK-LABEL: define void @empty_to_string
23 #[no_mangle]
24 pub fn empty_to_string() -> String {
25 // CHECK-NOT: load i8
26 // CHECK: store i{{32|64}}
27 // CHECK-NEXT: getelementptr
28 // CHECK-NEXT: store ptr
29 // CHECK-NEXT: getelementptr
30 // CHECK-NEXT: store i{{32|64}}
31 // CHECK-NEXT: ret void
32 "".to_string()
33 }
34
35 // The below two functions ensure that both `vec![]` and `vec![].clone()`
36 // produce the identical code.
37
38 // CHECK-LABEL: @empty_vec
39 #[no_mangle]
40 pub fn empty_vec() -> Vec<u8> {
41 // CHECK: store i{{32|64}}
42 // CHECK-NOT: load i8
43 // CHECK-NEXT: getelementptr
44 // CHECK-NEXT: store ptr
45 // CHECK-NEXT: getelementptr
46 // CHECK-NEXT: store i{{32|64}}
47 // CHECK-NEXT: ret void
48 vec![]
49 }
50
51 // CHECK-LABEL: @empty_vec_clone
52 #[no_mangle]
53 pub fn empty_vec_clone() -> Vec<u8> {
54 // CHECK: store i{{32|64}}
55 // CHECK-NOT: load i8
56 // CHECK-NEXT: getelementptr
57 // CHECK-NEXT: store ptr
58 // CHECK-NEXT: getelementptr
59 // CHECK-NEXT: store i{{32|64}}
60 // CHECK-NEXT: ret void
61 vec![].clone()
62 }