| // https://github.com/rust-lang/rust/issues/54478 | |
| #![crate_name="foo"] | |
| // Issue #54478: regression test showing that we can demonstrate | |
| // `#[global_allocator]` in code blocks built by `rustdoc`. | |
| // | |
| // ## Background | |
| // | |
| // Changes in lang-item visibility injected failures that were only | |
| // exposed when compiling with `-C prefer-dynamic`. But `rustdoc` used | |
| // `-C prefer-dynamic` (and had done so for years, for reasons we did | |
| // not document at that time). | |
| // | |
| // Rather than try to revise the visbility semanics, we instead | |
| // decided to change `rustdoc` to behave more like the compiler's | |
| // default setting, by leaving off `-C prefer-dynamic`. | |
| //@ compile-flags:--test | |
| //! This is a doc comment | |
| //! | |
| //! ```rust | |
| //! use std::alloc::*; | |
| //! | |
| //! #[global_allocator] | |
| //! static ALLOC: A = A; | |
| //! | |
| //! static mut HIT: bool = false; | |
| //! | |
| //! struct A; | |
| //! | |
| //! unsafe impl GlobalAlloc for A { | |
| //! unsafe fn alloc(&self, layout: Layout) -> *mut u8 { | |
| //! HIT = true; | |
| //! System.alloc(layout) | |
| //! } | |
| //! unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) { | |
| //! System.dealloc(ptr, layout); | |
| //! } | |
| //! } | |
| //! | |
| //! fn main() { | |
| //! drop(String::from("An allocation")); | |
| //! assert!(unsafe { HIT }); | |
| //! } | |
| //! ``` |