summaryrefslogtreecommitdiffstats
path: root/src/test/ui/box/leak-alloc.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/box/leak-alloc.rs')
-rw-r--r--src/test/ui/box/leak-alloc.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/test/ui/box/leak-alloc.rs b/src/test/ui/box/leak-alloc.rs
new file mode 100644
index 000000000..3f0f39f44
--- /dev/null
+++ b/src/test/ui/box/leak-alloc.rs
@@ -0,0 +1,29 @@
+#![feature(allocator_api)]
+
+use std::alloc::{AllocError, Allocator, Layout, System};
+use std::ptr::NonNull;
+
+use std::boxed::Box;
+
+struct Alloc {}
+
+unsafe impl Allocator for Alloc {
+ fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError> {
+ System.allocate(layout)
+ }
+
+ unsafe fn deallocate(&self, ptr: NonNull<u8>, layout: Layout) {
+ System.deallocate(ptr, layout)
+ }
+}
+
+fn use_value(_: u32) {}
+
+fn main() {
+ let alloc = Alloc {};
+ let boxed = Box::new_in(10, alloc.by_ref());
+ let theref = Box::leak(boxed);
+ drop(alloc);
+ //~^ ERROR cannot move out of `alloc` because it is borrowed
+ use_value(*theref)
+}