add lib tests for vec::IntoIter alignment issues

This commit is contained in:
Ralf Jung 2022-12-24 09:09:34 +01:00
parent 4f4d0586ad
commit 6fb314ed7d

View File

@ -7,7 +7,9 @@ use std::borrow::Cow;
use std::cell::Cell;
use std::collections::TryReserveErrorKind::*;
use std::fmt::Debug;
use std::hint;
use std::iter::InPlaceIterable;
use std::mem;
use std::mem::{size_of, swap};
use std::ops::Bound::*;
use std::panic::{catch_unwind, AssertUnwindSafe};
@ -1107,8 +1109,31 @@ fn test_into_iter_drop_allocator() {
#[test]
fn test_into_iter_zst() {
for _ in vec![[0u64; 0]].into_iter() {}
for _ in vec![[0u64; 0]; 5].into_iter().rev() {}
#[derive(Debug, Clone)]
struct AlignedZstWithDrop([u64; 0]);
impl Drop for AlignedZstWithDrop {
fn drop(&mut self) {
let addr = self as *mut _ as usize;
assert!(hint::black_box(addr) % mem::align_of::<u64>() == 0);
}
}
const C: AlignedZstWithDrop = AlignedZstWithDrop([0u64; 0]);
for _ in vec![C].into_iter() {}
for _ in vec![C; 5].into_iter().rev() {}
let mut it = vec![C, C].into_iter();
it.advance_by(1).unwrap();
drop(it);
let mut it = vec![C, C].into_iter();
it.next_chunk::<1>().unwrap();
drop(it);
let mut it = vec![C, C].into_iter();
it.next_chunk::<4>().unwrap_err();
drop(it);
}
#[test]