]> git.lizzy.rs Git - rust.git/blob - src/test/ui/allocator/xcrate-use.rs
Auto merge of #81507 - weiznich:add_diesel_to_cargo_test, r=Mark-Simulacrum
[rust.git] / src / test / ui / allocator / xcrate-use.rs
1 // run-pass
2
3 // aux-build:custom.rs
4 // aux-build:helper.rs
5 // no-prefer-dynamic
6
7 #![feature(allocator_api)]
8 #![feature(slice_ptr_get)]
9
10 extern crate custom;
11 extern crate helper;
12
13 use std::alloc::{Allocator, Global, Layout, System};
14 use std::sync::atomic::{AtomicUsize, Ordering};
15
16 #[global_allocator]
17 static GLOBAL: custom::A = custom::A(AtomicUsize::new(0));
18
19 fn main() {
20     unsafe {
21         let n = GLOBAL.0.load(Ordering::SeqCst);
22         let layout = Layout::from_size_align(4, 2).unwrap();
23
24         let memory = Global.allocate(layout.clone()).unwrap();
25         helper::work_with(&memory);
26         assert_eq!(GLOBAL.0.load(Ordering::SeqCst), n + 1);
27         Global.deallocate(memory.as_non_null_ptr(), layout);
28         assert_eq!(GLOBAL.0.load(Ordering::SeqCst), n + 2);
29
30         let memory = System.allocate(layout.clone()).unwrap();
31         assert_eq!(GLOBAL.0.load(Ordering::SeqCst), n + 2);
32         helper::work_with(&memory);
33         System.deallocate(memory.as_non_null_ptr(), layout);
34         assert_eq!(GLOBAL.0.load(Ordering::SeqCst), n + 2);
35     }
36 }