Skip to content

Commit 3c5198d

Browse files
committed
Auto merge of rust-lang#106103 - matthiaskrgr:rollup-8xe9ddz, r=matthiaskrgr
Rollup of 7 pull requests Successful merges: - rust-lang#105970 (docs/test: add UI test and long-form error docs for E0462) - rust-lang#105975 (rustc: Remove needless lifetimes) - rust-lang#106069 (rustdoc: use a more evocative name for CSS/JS `#titles`) - rust-lang#106084 (fix vec::IntoIter::drop on high-alignment ZST) - rust-lang#106091 (Use correct CSS pseudo-element selector) - rust-lang#106093 (rustdoc: remove no-op CSS from `.docblock-short`) - rust-lang#106102 (Fix `triagebot.toml`) Failed merges: - rust-lang#106028 (docs/test: add UI test and long-form error docs for `E0461`) r? `@ghost` `@rustbot` modify labels: rollup
2 parents ac6da0b + c39f6af commit 3c5198d

File tree

2 files changed

+26
-7
lines changed

2 files changed

+26
-7
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -639,6 +639,7 @@ Definite bugs found:
639639
* [Data race in `thread::scope`](https://github.com/rust-lang/rust/issues/98498)
640640
* [`regex` incorrectly handling unaligned `Vec<u8>` buffers](https://www.reddit.com/r/rust/comments/vq3mmu/comment/ienc7t0?context=3)
641641
* [Incorrect use of `compare_exchange_weak` in `once_cell`](https://github.com/matklad/once_cell/issues/186)
642+
* [Dropping with unaligned pointers in `vec::IntoIter`](https://github.com/rust-lang/rust/pull/106084)
642643

643644
Violations of [Stacked Borrows] found that are likely bugs (but Stacked Borrows is currently just an experiment):
644645

tests/pass/vec.rs

+25-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
//@compile-flags: -Zmiri-strict-provenance
2+
#![feature(iter_advance_by, iter_next_chunk)]
3+
24
// Gather all references from a mutable iterator and make sure Miri notices if
35
// using them is dangerous.
46
fn test_all_refs<'a, T: 'a>(dummy: &mut T, iter: impl Iterator<Item = &'a mut T>) {
@@ -37,15 +39,31 @@ fn vec_into_iter() -> u8 {
3739
}
3840

3941
fn vec_into_iter_rev() -> u8 {
40-
vec![1, 2, 3, 4].into_iter().map(|x| x * x).fold(0, |x, y| x + y)
42+
vec![1, 2, 3, 4].into_iter().rev().map(|x| x * x).fold(0, |x, y| x + y)
4143
}
4244

43-
fn vec_into_iter_zst() -> usize {
44-
vec![[0u64; 0], [0u64; 0]].into_iter().rev().map(|x| x.len()).sum()
45+
fn vec_into_iter_zst() {
46+
for _ in vec![[0u64; 0]].into_iter() {}
47+
let v = vec![[0u64; 0], [0u64; 0]].into_iter().map(|x| x.len()).sum::<usize>();
48+
assert_eq!(v, 0);
49+
50+
let mut it = vec![[0u64; 0], [0u64; 0]].into_iter();
51+
it.advance_by(1);
52+
drop(it);
53+
54+
let mut it = vec![[0u64; 0], [0u64; 0]].into_iter();
55+
it.next_chunk::<1>().unwrap();
56+
drop(it);
57+
58+
let mut it = vec![[0u64; 0], [0u64; 0]].into_iter();
59+
it.next_chunk::<4>().unwrap_err();
60+
drop(it);
4561
}
4662

47-
fn vec_into_iter_rev_zst() -> usize {
48-
vec![[0u64; 0], [0u64; 0]].into_iter().rev().map(|x| x.len()).sum()
63+
fn vec_into_iter_rev_zst() {
64+
for _ in vec![[0u64; 0]; 5].into_iter().rev() {}
65+
let v = vec![[0u64; 0], [0u64; 0]].into_iter().rev().map(|x| x.len()).sum::<usize>();
66+
assert_eq!(v, 0);
4967
}
5068

5169
fn vec_iter_and_mut() {
@@ -150,8 +168,8 @@ fn main() {
150168
assert_eq!(vec_into_iter(), 30);
151169
assert_eq!(vec_into_iter_rev(), 30);
152170
vec_iter_and_mut();
153-
assert_eq!(vec_into_iter_zst(), 0);
154-
assert_eq!(vec_into_iter_rev_zst(), 0);
171+
vec_into_iter_zst();
172+
vec_into_iter_rev_zst();
155173
vec_iter_and_mut_rev();
156174

157175
assert_eq!(make_vec().capacity(), 4);

0 commit comments

Comments
 (0)