1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
//@ edition: 2021
#![feature(must_not_suspend, allocator_api)]
#![deny(must_not_suspend)]
use std::alloc::*;
use std::ptr::NonNull;
#[must_not_suspend]
struct MyAllocatorWhichMustNotSuspend;
unsafe impl Allocator for MyAllocatorWhichMustNotSuspend {
fn allocate(&self, l: Layout) -> Result<NonNull<[u8]>, AllocError> {
Global.allocate(l)
}
unsafe fn deallocate(&self, p: NonNull<u8>, l: Layout) {
Global.deallocate(p, l)
}
}
async fn suspend() {}
async fn foo() {
let x = Box::new_in(1i32, MyAllocatorWhichMustNotSuspend);
//~^ ERROR allocator `MyAllocatorWhichMustNotSuspend` held across a suspend point, but should not be
suspend().await;
drop(x);
}
fn main() {}
|