47 lines
1.2 KiB
Rust
47 lines
1.2 KiB
Rust
// 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 });
|
|
//! }
|
|
//! ```
|