blob: 2b9966b68eca866a867d6799397b338c0861ed5d [file] [edit]
#![feature(allocator_api)]
use std::{
alloc::{Allocator, Global, System},
sync::Arc,
};
pub trait MyAlloc: Allocator {}
impl<A: Allocator> MyAlloc for A {}
impl Clone for Box<dyn MyAlloc> {
fn clone(&self) -> Self {
Box::new(System)
}
}
fn main() {
let evil_arc: Arc<i32, Box<dyn MyAlloc>> = Arc::new_in(69420, Box::new(Global));
// clone() returns `System` instead of `Global`, but `Arc` requires equivalent allocators
// Make sure to not accidentally call <&Arc>::clone here.
let _ = <Arc<_, _> as Clone>::clone(&evil_arc);
//~^ ERROR: the trait bound `Box<dyn MyAlloc>: AllocatorClone` is not satisfied [E0277]
}