//@ 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() }