Emit const assertions for every vector element type

This commit is contained in:
David Tolnay 2020-04-25 11:29:26 -07:00
parent a006bca891
commit f044663b2a
No known key found for this signature in database
GPG Key ID: F9BA143B95FF6D82
2 changed files with 5 additions and 5 deletions

View File

@ -136,6 +136,8 @@ pub unsafe trait VectorElement: Sized {
macro_rules! impl_vector_element_for_primitive {
($ty:ident) => {
const_assert_eq!(1, mem::align_of::<CxxVector<$ty>>());
unsafe impl VectorElement for $ty {
const __NAME: &'static dyn Display = &stringify!($ty);
fn __vector_size(v: &CxxVector<$ty>) -> usize {
@ -230,5 +232,3 @@ impl_vector_element_for_primitive!(i64);
impl_vector_element_for_primitive!(isize);
impl_vector_element_for_primitive!(f32);
impl_vector_element_for_primitive!(f64);
const_assert_eq!(1, mem::align_of::<CxxVector<usize>>());

View File

@ -38,6 +38,9 @@ impl<T> RustVec<T> {
macro_rules! rust_vec_shims_for_primitive {
($ty:ident) => {
const_assert_eq!(mem::size_of::<[usize; 3]>(), mem::size_of::<Vec<$ty>>());
const_assert_eq!(mem::align_of::<usize>(), mem::align_of::<Vec<$ty>>());
const _: () = {
attr! {
#[export_name = concat!("cxxbridge02$rust_vec$", stringify!($ty), "$drop")]
@ -77,6 +80,3 @@ rust_vec_shims_for_primitive!(i32);
rust_vec_shims_for_primitive!(i64);
rust_vec_shims_for_primitive!(f32);
rust_vec_shims_for_primitive!(f64);
const_assert_eq!(mem::size_of::<[usize; 3]>(), mem::size_of::<Vec<i32>>());
const_assert_eq!(mem::align_of::<usize>(), mem::align_of::<Vec<i32>>());