From: Ralf Jung Date: Thu, 18 Apr 2019 09:54:21 +0000 (+0200) Subject: add LinkedList test and mention the bug Miri found there X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=677bd6f65646a6610ec2e3d11b203392477e3dd8;p=rust.git add LinkedList test and mention the bug Miri found there --- diff --git a/README.md b/README.md index 716c26c03a7..464c1c33c2d 100644 --- a/README.md +++ b/README.md @@ -297,6 +297,7 @@ Miri has already found a number of bugs in the Rust standard library, which we c * [Futures turning a shared reference into a mutable one](https://github.com/rust-lang/rust/pull/56319) * [`str` turning a shared reference into a mutable one](https://github.com/rust-lang/rust/pull/58200) * [`BTreeMap` creating mutable references that overlap with shared references](https://github.com/rust-lang/rust/pull/58431) +* [`LinkedList` creating overlapping mutable references](https://github.com/rust-lang/rust/pull/60072) ## License diff --git a/tests/run-pass/linked-list.rs b/tests/run-pass/linked-list.rs new file mode 100644 index 00000000000..f1d21728b2f --- /dev/null +++ b/tests/run-pass/linked-list.rs @@ -0,0 +1,33 @@ +#![feature(linked_list_extras)] +use std::collections::LinkedList; + +fn list_from(v: &[T]) -> LinkedList { + v.iter().cloned().collect() +} + +fn main() { + let mut m = list_from(&[0, 2, 4, 6, 8]); + let len = m.len(); + { + let mut it = m.iter_mut(); + it.insert_next(-2); + loop { + match it.next() { + None => break, + Some(elt) => { + it.insert_next(*elt + 1); + match it.peek_next() { + Some(x) => assert_eq!(*x, *elt + 2), + None => assert_eq!(8, *elt), + } + } + } + } + it.insert_next(0); + it.insert_next(1); + } + + assert_eq!(m.len(), 3 + len * 2); + assert_eq!(m.into_iter().collect::>(), + [-2, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1]); +}