mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
style: Fix an assertion that doesn't account for alignment padding.
I'm hitting this when trying to add bindings for box shadows, which are 32-bit aligned. Differential Revision: https://phabricator.services.mozilla.com/D30353
This commit is contained in:
parent
99b97737fe
commit
81e706469d
1 changed files with 21 additions and 3 deletions
|
@ -602,7 +602,7 @@ impl<H, T> Arc<HeaderSlice<H, [T]>> {
|
|||
F: FnOnce(Layout) -> *mut u8,
|
||||
I: Iterator<Item = T> + ExactSizeIterator,
|
||||
{
|
||||
use std::mem::size_of;
|
||||
use std::mem::{align_of, size_of};
|
||||
assert_ne!(size_of::<T>(), 0, "Need to think about ZST");
|
||||
|
||||
// Compute the required size for the allocation.
|
||||
|
@ -678,8 +678,9 @@ impl<H, T> Arc<HeaderSlice<H, [T]>> {
|
|||
);
|
||||
current = current.offset(1);
|
||||
}
|
||||
// We should have consumed the buffer exactly.
|
||||
debug_assert_eq!(current as *mut u8, buffer.offset(size as isize));
|
||||
// We should have consumed the buffer exactly, maybe accounting
|
||||
// for some padding from the alignment.
|
||||
debug_assert!((buffer.offset(size as isize) as usize - current as *mut u8 as usize) < align_of::<Self>());
|
||||
}
|
||||
assert!(
|
||||
items.next().is_none(),
|
||||
|
@ -1334,6 +1335,23 @@ mod tests {
|
|||
assert!(x.slice.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn thin_assert_padding() {
|
||||
#[derive(Clone, Default)]
|
||||
#[repr(C)]
|
||||
struct Padded {
|
||||
i: u16,
|
||||
}
|
||||
|
||||
// The header will have more alignment than `Padded`
|
||||
let header = HeaderWithLength::new(0i32, 2);
|
||||
let items = vec![Padded { i: 0xdead }, Padded { i: 0xbeef }];
|
||||
let a = ThinArc::from_header_and_iter(header, items.into_iter());
|
||||
assert_eq!(a.slice.len(), 2);
|
||||
assert_eq!(a.slice[0].i, 0xdead);
|
||||
assert_eq!(a.slice[1].i, 0xbeef);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn slices_and_thin() {
|
||||
let mut canary = atomic::AtomicUsize::new(0);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue