Merge pull request #144 from RalfJung/miri
fix drain_range in Miri and add Miri to CI
This commit is contained in:
@@ -63,6 +63,7 @@ pub unsafe fn encode_utf8(ch: char, ptr: *mut u8, len: usize) -> Result<usize, E
|
||||
|
||||
|
||||
#[test]
|
||||
#[cfg(not(miri))] // Miri is too slow
|
||||
fn test_encode_utf8() {
|
||||
// Test that all codepoints are encoded correctly
|
||||
let mut data = [0u8; 16];
|
||||
|
||||
+6
-3
@@ -598,12 +598,15 @@ impl<A: Array> ArrayVec<A> {
|
||||
fn drain_range(&mut self, start: usize, end: usize) -> Drain<A>
|
||||
{
|
||||
let len = self.len();
|
||||
// bounds check happens here
|
||||
|
||||
// bounds check happens here (before length is changed!)
|
||||
let range_slice: *const _ = &self[start..end];
|
||||
|
||||
// Calling `set_len` creates a fresh and thus unique mutable references, making all
|
||||
// older aliases we created invalid. So we cannot call that function.
|
||||
self.len = Index::from(start);
|
||||
|
||||
unsafe {
|
||||
// set self.vec length's to start, to be safe in case Drain is leaked
|
||||
self.set_len(start);
|
||||
Drain {
|
||||
tail_start: end,
|
||||
tail_len: len - end,
|
||||
|
||||
Reference in New Issue
Block a user