mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-04 06:56:14 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			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 });
 | 
						|
//! }
 | 
						|
//! ```
 |