Skip to content

Commit ee0412d

Browse files
committed
Auto merge of #106036 - JohnTitor:issue-86106, r=nikic
Add regression test for #86106 Closes #86106 r? `@nikic` Signed-off-by: Yuki Okushi <[email protected]>
2 parents b1691f6 + ab9313e commit ee0412d

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

src/test/codegen/issue-86106.rs

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
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+
}

0 commit comments

Comments
 (0)