Auto merge of #106112 - RalfJung:into-iter, r=thomcc

add lib tests for vec::IntoIter alignment issues

This adds non-Miri tests for the issue fixed in https://github.com/rust-lang/rust/pull/106084

r? `@thomcc`
This commit is contained in:
bors
2022-12-25 04:26:14 +00:00
+27 -2
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]