Skip to content

Commit fdb7ada

Browse files
committed
Add codegen tests
Signed-off-by: Alex Saveau <[email protected]>
1 parent 592632d commit fdb7ada

File tree

2 files changed

+122
-0
lines changed

2 files changed

+122
-0
lines changed

tests/codegen/string_reserve_push.rs

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// compile-flags: -O
2+
3+
#![crate_type = "lib"]
4+
5+
use std::arch::asm;
6+
7+
#[no_mangle]
8+
// CHECK-LABEL: @reserve_push_str(
9+
pub fn reserve_push_str(v: &mut String, s: &str) {
10+
// CHECK: do_reserve_and_handle
11+
// CHECK: "nop"
12+
// CHECK-NOT: do_reserve_and_handle
13+
// CHECK: ret
14+
v.reserve(s.len());
15+
unsafe {
16+
asm!("nop"); // Used to make the check logic easier
17+
}
18+
v.push_str(s);
19+
}
20+
21+
#[no_mangle]
22+
// CHECK-LABEL: @reserve_exact_push_str(
23+
pub fn reserve_exact_push_str(v: &mut String, s: &str) {
24+
// CHECK: finish_grow
25+
// CHECK: "nop"
26+
// CHECK-NOT: finish_grow
27+
// CHECK: ret
28+
v.reserve_exact(s.len());
29+
unsafe {
30+
asm!("nop"); // Used to make the check logic easier
31+
}
32+
v.push_str(s);
33+
}
34+
35+
#[no_mangle]
36+
// CHECK-LABEL: @try_reserve_push_str(
37+
pub fn try_reserve_push_str(v: &mut String, s: &str) {
38+
// CHECK: finish_grow
39+
// CHECK: "nop"
40+
// CHECK-NOT: finish_grow
41+
// CHECK: ret
42+
v.try_reserve(s.len());
43+
unsafe {
44+
asm!("nop"); // Used to make the check logic easier
45+
}
46+
v.push_str(s);
47+
}
48+
49+
#[no_mangle]
50+
// CHECK-LABEL: @try_reserve_exact_push_str(
51+
pub fn try_reserve_exact_push_str(v: &mut String, s: &str) {
52+
// CHECK: finish_grow
53+
// CHECK: "nop"
54+
// CHECK-NOT: finish_grow
55+
// CHECK: ret
56+
v.try_reserve_exact(s.len());
57+
unsafe {
58+
asm!("nop"); // Used to make the check logic easier
59+
}
60+
v.push_str(s);
61+
}

tests/codegen/vec_reserve_extend.rs

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// compile-flags: -O
2+
3+
#![crate_type = "lib"]
4+
5+
use std::arch::asm;
6+
7+
#[no_mangle]
8+
// CHECK-LABEL: @reserve_extend(
9+
pub fn reserve_extend(v: &mut Vec<u8>, s: &[u8]) {
10+
// CHECK: do_reserve_and_handle
11+
// CHECK: "nop"
12+
// CHECK-NOT: do_reserve_and_handle
13+
// CHECK: ret
14+
v.reserve(s.len());
15+
unsafe {
16+
asm!("nop"); // Used to make the check logic easier
17+
}
18+
v.extend_from_slice(s);
19+
}
20+
21+
#[no_mangle]
22+
// CHECK-LABEL: @reserve_exact_extend(
23+
pub fn reserve_exact_extend(v: &mut Vec<u8>, s: &[u8]) {
24+
// CHECK: finish_grow
25+
// CHECK: "nop"
26+
// CHECK-NOT: finish_grow
27+
// CHECK: ret
28+
v.reserve_exact(s.len());
29+
unsafe {
30+
asm!("nop"); // Used to make the check logic easier
31+
}
32+
v.extend_from_slice(s);
33+
}
34+
35+
#[no_mangle]
36+
// CHECK-LABEL: @try_reserve_extend(
37+
pub fn try_reserve_extend(v: &mut Vec<u8>, s: &[u8]) {
38+
// CHECK: finish_grow
39+
// CHECK: "nop"
40+
// CHECK-NOT: finish_grow
41+
// CHECK: ret
42+
v.try_reserve(s.len());
43+
unsafe {
44+
asm!("nop"); // Used to make the check logic easier
45+
}
46+
v.extend_from_slice(s);
47+
}
48+
49+
#[no_mangle]
50+
// CHECK-LABEL: @try_reserve_exact_extend(
51+
pub fn try_reserve_exact_extend(v: &mut Vec<u8>, s: &[u8]) {
52+
// CHECK: finish_grow
53+
// CHECK: "nop"
54+
// CHECK-NOT: finish_grow
55+
// CHECK: ret
56+
v.try_reserve_exact(s.len());
57+
unsafe {
58+
asm!("nop"); // Used to make the check logic easier
59+
}
60+
v.extend_from_slice(s);
61+
}

0 commit comments

Comments
 (0)