diff options
| author | Michael Goulet <michael@errs.io> | 2022-08-10 09:28:25 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-10 09:28:25 -0700 |
| commit | eff71b9927a98900ace67494fb9b1cb45a3b80a5 (patch) | |
| tree | 969be2fcbe825df2c156e86fcd433c02fce05394 | |
| parent | 96fc9f177e37f560787e37b8fee4e1dd772b6bfa (diff) | |
| parent | de95117ea8480ad6f5be175de8a1348b09970153 (diff) | |
| download | rust-eff71b9927a98900ace67494fb9b1cb45a3b80a5.tar.gz rust-eff71b9927a98900ace67494fb9b1cb45a3b80a5.zip | |
Rollup merge of #100371 - xfix:inline-from-bytes-with-nul-unchecked-rt-impl, r=scottmcm
Inline CStr::from_bytes_with_nul_unchecked::rt_impl
Currently `CStr::from_bytes_with_nul_unchecked::rt_impl` is not being inlined. The following function:
```rust
pub unsafe fn from_bytes_with_nul_unchecked(bytes: &[u8]) {
CStr::from_bytes_with_nul_unchecked(bytes);
}
```
Outputs the following assembly on current nightly
```asm
example::from_bytes_with_nul_unchecked:
jmp qword ptr [rip + _ZN4core3ffi5c_str4CStr29from_bytes_with_nul_unchecked7rt_impl17h026f29f3d6a41333E@GOTPCREL]
```
Meanwhile on beta this provides the following assembly:
```asm
example::from_bytes_with_nul_unchecked:
ret
```
This pull request adds `#[inline]` annotation to`rt_impl` to fix a code generation regression for `CStr::from_bytes_with_nul_unchecked`.
| -rw-r--r-- | library/core/src/ffi/c_str.rs | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/library/core/src/ffi/c_str.rs b/library/core/src/ffi/c_str.rs index 82e63a7fe1d..d8b8ac4d871 100644 --- a/library/core/src/ffi/c_str.rs +++ b/library/core/src/ffi/c_str.rs @@ -387,6 +387,7 @@ impl CStr { #[rustc_const_stable(feature = "const_cstr_unchecked", since = "1.59.0")] #[rustc_allow_const_fn_unstable(const_eval_select)] pub const unsafe fn from_bytes_with_nul_unchecked(bytes: &[u8]) -> &CStr { + #[inline] fn rt_impl(bytes: &[u8]) -> &CStr { // Chance at catching some UB at runtime with debug builds. debug_assert!(!bytes.is_empty() && bytes[bytes.len() - 1] == 0); |
