Hide niches in SIMD types, too

This commit is contained in:
Oli Scherer 2022-07-11 10:25:41 +00:00
parent 423915590b
commit 984db78d77
2 changed files with 9 additions and 6 deletions

View File

@ -1092,12 +1092,7 @@ impl<'tcx> LayoutCx<'tcx, TyCtxt<'tcx>> {
hide_niches(a);
hide_niches(b);
}
Abi::Vector { element, count: _ } => {
// Until we support types other than floats and integers in SIMD,
// `element` must already be a full for its range, so there's nothing to
// do here.
assert!(element.is_always_valid(dl));
}
Abi::Vector { element, count: _ } => hide_niches(element),
Abi::Aggregate { sized: _ } => {}
}
st.largest_niche = None;

View File

@ -5,6 +5,8 @@
// run-pass
#![feature(repr_simd)]
use std::cell::{UnsafeCell, RefCell, Cell};
use std::mem::size_of;
use std::num::NonZeroU32 as N32;
@ -47,4 +49,10 @@ fn main() {
trait Trait {}
assert_eq!(size_of::< UnsafeCell<&dyn Trait> >(), 16);
assert_eq!(size_of::<Option<UnsafeCell<&dyn Trait>>>(), 24); // (✗ niche opt)
#[repr(simd)]
pub struct Vec4<T>([T; 4]);
assert_eq!(size_of::< UnsafeCell<Vec4<N32>> >(), 16);
assert_eq!(size_of::<Option<UnsafeCell<Vec4<N32>>>>(), 32); // (✗ niche opt)
}