Rollup merge of #111966 - saethlin:inline-slice-tryfrom, r=thomcc
Add #[inline] to array TryFrom impls I was looking into https://github.com/rust-lang/rust/issues/111959 and I realized we don't have these. They seem like an uncontroversial addition. IMO this PR does not fix that issue. I think the bad codegen is being caused by some underlying deeper problem but this change might cause the MIR inliner to paper over it in this specific case. r? `@thomcc`
This commit is contained in:
commit
b2abb2b056
1 changed files with 4 additions and 0 deletions
|
@ -204,6 +204,7 @@ where
|
||||||
{
|
{
|
||||||
type Error = TryFromSliceError;
|
type Error = TryFromSliceError;
|
||||||
|
|
||||||
|
#[inline]
|
||||||
fn try_from(slice: &[T]) -> Result<[T; N], TryFromSliceError> {
|
fn try_from(slice: &[T]) -> Result<[T; N], TryFromSliceError> {
|
||||||
<&Self>::try_from(slice).map(|r| *r)
|
<&Self>::try_from(slice).map(|r| *r)
|
||||||
}
|
}
|
||||||
|
@ -228,6 +229,7 @@ where
|
||||||
{
|
{
|
||||||
type Error = TryFromSliceError;
|
type Error = TryFromSliceError;
|
||||||
|
|
||||||
|
#[inline]
|
||||||
fn try_from(slice: &mut [T]) -> Result<[T; N], TryFromSliceError> {
|
fn try_from(slice: &mut [T]) -> Result<[T; N], TryFromSliceError> {
|
||||||
<Self>::try_from(&*slice)
|
<Self>::try_from(&*slice)
|
||||||
}
|
}
|
||||||
|
@ -249,6 +251,7 @@ where
|
||||||
impl<'a, T, const N: usize> TryFrom<&'a [T]> for &'a [T; N] {
|
impl<'a, T, const N: usize> TryFrom<&'a [T]> for &'a [T; N] {
|
||||||
type Error = TryFromSliceError;
|
type Error = TryFromSliceError;
|
||||||
|
|
||||||
|
#[inline]
|
||||||
fn try_from(slice: &'a [T]) -> Result<&'a [T; N], TryFromSliceError> {
|
fn try_from(slice: &'a [T]) -> Result<&'a [T; N], TryFromSliceError> {
|
||||||
if slice.len() == N {
|
if slice.len() == N {
|
||||||
let ptr = slice.as_ptr() as *const [T; N];
|
let ptr = slice.as_ptr() as *const [T; N];
|
||||||
|
@ -276,6 +279,7 @@ impl<'a, T, const N: usize> TryFrom<&'a [T]> for &'a [T; N] {
|
||||||
impl<'a, T, const N: usize> TryFrom<&'a mut [T]> for &'a mut [T; N] {
|
impl<'a, T, const N: usize> TryFrom<&'a mut [T]> for &'a mut [T; N] {
|
||||||
type Error = TryFromSliceError;
|
type Error = TryFromSliceError;
|
||||||
|
|
||||||
|
#[inline]
|
||||||
fn try_from(slice: &'a mut [T]) -> Result<&'a mut [T; N], TryFromSliceError> {
|
fn try_from(slice: &'a mut [T]) -> Result<&'a mut [T; N], TryFromSliceError> {
|
||||||
if slice.len() == N {
|
if slice.len() == N {
|
||||||
let ptr = slice.as_mut_ptr() as *mut [T; N];
|
let ptr = slice.as_mut_ptr() as *mut [T; N];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue