37 lines
1.1 KiB
Rust
37 lines
1.1 KiB
Rust
|
//@ compile-flags: -C opt-level=3 -Z merge-functions=disabled
|
||
|
#![crate_type = "lib"]
|
||
|
|
||
|
//! Make sure str::to_string is specialized not to use fmt machinery.
|
||
|
|
||
|
// CHECK-LABEL: define {{(dso_local )?}}void @one_ref
|
||
|
#[no_mangle]
|
||
|
pub fn one_ref(input: &str) -> String {
|
||
|
// CHECK-NOT: {{(call|invoke).*}}fmt
|
||
|
input.to_string()
|
||
|
}
|
||
|
|
||
|
// CHECK-LABEL: define {{(dso_local )?}}void @two_ref
|
||
|
#[no_mangle]
|
||
|
pub fn two_ref(input: &&str) -> String {
|
||
|
// CHECK-NOT: {{(call|invoke).*}}fmt
|
||
|
input.to_string()
|
||
|
}
|
||
|
|
||
|
// CHECK-LABEL: define {{(dso_local )?}}void @thirteen_ref
|
||
|
#[no_mangle]
|
||
|
pub fn thirteen_ref(input: &&&&&&&&&&&&&str) -> String {
|
||
|
// CHECK-NOT: {{(call|invoke).*}}fmt
|
||
|
input.to_string()
|
||
|
}
|
||
|
|
||
|
// This is a known performance cliff because of the macro-generated
|
||
|
// specialized impl. If this test suddenly starts failing,
|
||
|
// consider removing the `to_string_str!` macro in `alloc/str/string.rs`.
|
||
|
//
|
||
|
// CHECK-LABEL: define {{(dso_local )?}}void @fourteen_ref
|
||
|
#[no_mangle]
|
||
|
pub fn fourteen_ref(input: &&&&&&&&&&&&&&str) -> String {
|
||
|
// CHECK: {{(call|invoke).*}}fmt
|
||
|
input.to_string()
|
||
|
}
|