test that even &Cell must be dereferencable

This commit is contained in:
Ralf Jung 2019-08-09 19:21:41 +02:00
parent c1cb24969e
commit b93629262d
2 changed files with 17 additions and 0 deletions

View File

@ -0,0 +1,17 @@
// error-pattern: deallocating while item is protected
use std::cell::Cell;
// Check that even `&Cell` are dereferencable.
// Also see <https://github.com/rust-lang/rust/issues/55005>.
fn inner(x: &Cell<i32>, f: fn(&Cell<i32>)) {
// `f` may mutate, but it may not deallocate!
f(x)
}
fn main() {
inner(Box::leak(Box::new(Cell::new(0))), |x| {
let raw = x as *const _ as *mut Cell<i32>;
drop(unsafe { Box::from_raw(raw) });
});
}