mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-30 22:12:15 +00:00
Rollup merge of #107972 - saethlin:fix-test-ub, r=michaelwoerister
Fix unintentional UB in ui tests `@matthiaskrgr` found UB in a bunch of the ui tests. This PR fixes a batch of miscellaneous tests I didn't think needed reviewers from a particular part of the project.
This commit is contained in:
commit
d40c13ae02
@ -26,7 +26,7 @@ fn test_send_trait() {
|
||||
//~| HELP: add a dummy let to cause `fptr` to be fully captured
|
||||
*fptr.0 = 20;
|
||||
//~^ NOTE: in Rust 2018, this closure captures all of `fptr`, but in Rust 2021, it will only capture `fptr.0`
|
||||
} });
|
||||
} }).join().unwrap();
|
||||
}
|
||||
|
||||
/* Test Sync Trait Migration */
|
||||
@ -47,7 +47,7 @@ fn test_sync_trait() {
|
||||
//~| HELP: add a dummy let to cause `fptr` to be fully captured
|
||||
*fptr.0.0 = 20;
|
||||
//~^ NOTE: in Rust 2018, this closure captures all of `fptr`, but in Rust 2021, it will only capture `fptr.0.0`
|
||||
} });
|
||||
} }).join().unwrap();
|
||||
}
|
||||
|
||||
/* Test Clone Trait Migration */
|
||||
|
@ -26,7 +26,7 @@ fn test_send_trait() {
|
||||
//~| HELP: add a dummy let to cause `fptr` to be fully captured
|
||||
*fptr.0 = 20;
|
||||
//~^ NOTE: in Rust 2018, this closure captures all of `fptr`, but in Rust 2021, it will only capture `fptr.0`
|
||||
});
|
||||
}).join().unwrap();
|
||||
}
|
||||
|
||||
/* Test Sync Trait Migration */
|
||||
@ -47,7 +47,7 @@ fn test_sync_trait() {
|
||||
//~| HELP: add a dummy let to cause `fptr` to be fully captured
|
||||
*fptr.0.0 = 20;
|
||||
//~^ NOTE: in Rust 2018, this closure captures all of `fptr`, but in Rust 2021, it will only capture `fptr.0.0`
|
||||
});
|
||||
}).join().unwrap();
|
||||
}
|
||||
|
||||
/* Test Clone Trait Migration */
|
||||
|
@ -19,7 +19,7 @@ LL ~ thread::spawn(move || { let _ = &fptr; unsafe {
|
||||
LL |
|
||||
...
|
||||
LL |
|
||||
LL ~ } });
|
||||
LL ~ } }).join().unwrap();
|
||||
|
|
||||
|
||||
error: changes to closure capture in Rust 2021 will affect which traits the closure implements
|
||||
@ -41,7 +41,7 @@ LL ~ thread::spawn(move || { let _ = &fptr; unsafe {
|
||||
LL |
|
||||
...
|
||||
LL |
|
||||
LL ~ } });
|
||||
LL ~ } }).join().unwrap();
|
||||
|
|
||||
|
||||
error: changes to closure capture in Rust 2021 will affect drop order and which traits the closure implements
|
||||
|
@ -145,7 +145,7 @@ fn test_multi_traits_issues() {
|
||||
//~^ NOTE: in Rust 2018, this closure captures all of `fptr1`, but in Rust 2021, it will only capture `fptr1.0.0`
|
||||
*fptr2.0 = 20;
|
||||
//~^ NOTE: in Rust 2018, this closure captures all of `fptr2`, but in Rust 2021, it will only capture `fptr2.0`
|
||||
} });
|
||||
} }).join().unwrap();
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
@ -141,7 +141,7 @@ fn test_multi_traits_issues() {
|
||||
//~^ NOTE: in Rust 2018, this closure captures all of `fptr1`, but in Rust 2021, it will only capture `fptr1.0.0`
|
||||
*fptr2.0 = 20;
|
||||
//~^ NOTE: in Rust 2018, this closure captures all of `fptr2`, but in Rust 2021, it will only capture `fptr2.0`
|
||||
});
|
||||
}).join().unwrap();
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
@ -111,7 +111,7 @@ LL ~ thread::spawn(move || { let _ = (&fptr1, &fptr2); unsafe {
|
||||
LL |
|
||||
...
|
||||
LL |
|
||||
LL ~ } });
|
||||
LL ~ } }).join().unwrap();
|
||||
|
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
@ -28,7 +28,10 @@ pub struct ListImpl<T, const N: usize> {
|
||||
|
||||
impl<T> List<T> {
|
||||
const fn as_slice(&self) -> &[T] {
|
||||
unsafe { std::slice::from_raw_parts(self.data.as_ptr(), self.len) }
|
||||
unsafe {
|
||||
let ptr = addr_of!(self.tail) as *const T;
|
||||
std::slice::from_raw_parts(ptr, self.len)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -59,7 +59,7 @@ pub fn main() {
|
||||
}
|
||||
|
||||
let data: Box<Foo_<i32>> = Box::new(Foo_ { f: [1, 2, 3] });
|
||||
let x: &Foo<i32> = mem::transmute(slice::from_raw_parts(&*data, 3));
|
||||
let x: &Foo<i32> = mem::transmute(ptr::slice_from_raw_parts(&*data, 3));
|
||||
assert_eq!(x.f.len(), 3);
|
||||
assert_eq!(x.f[0], 1);
|
||||
|
||||
@ -70,7 +70,7 @@ pub fn main() {
|
||||
|
||||
let data: Box<_> =
|
||||
Box::new(Baz_ { f1: 42, f2: ['a' as u8, 'b' as u8, 'c' as u8, 'd' as u8, 'e' as u8] });
|
||||
let x: &Baz = mem::transmute(slice::from_raw_parts(&*data, 5));
|
||||
let x: &Baz = mem::transmute(ptr::slice_from_raw_parts(&*data, 5));
|
||||
assert_eq!(x.f1, 42);
|
||||
let chs: Vec<char> = x.f2.chars().collect();
|
||||
assert_eq!(chs.len(), 5);
|
||||
|
Loading…
Reference in New Issue
Block a user