]> git.proxmox.com Git - rustc.git/blame - tests/codegen/issue-86106.rs
New upstream version 1.69.0+dfsg1
[rustc.git] / tests / codegen / issue-86106.rs
CommitLineData
9c376795
FG
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]
11pub 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]
24pub 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]
40pub 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]
53pub 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}