rust/tests/ui/lint/must_not_suspend/allocator.rs

31 lines
720 B
Rust

//@ 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() {}