diff options
| author | RustyYato <krishna.sd.2012@gmail.com> | 2021-02-03 16:59:28 -0500 |
|---|---|---|
| committer | RustyYato <krishna.sd.2012@gmail.com> | 2021-02-03 20:46:16 -0500 |
| commit | d06384ac29098c3a4b3e21eb2f70093e800bd1b6 (patch) | |
| tree | fcb742f4ff19d13b36e8b3ccd340acbcf6b309f6 | |
| parent | 120b2a704a60d4341286bd82f6e638c65ca169b6 (diff) | |
| download | rust-d06384ac29098c3a4b3e21eb2f70093e800bd1b6.tar.gz rust-d06384ac29098c3a4b3e21eb2f70093e800bd1b6.zip | |
make Allocator object-safe
add test to ensure object-safety This allows for runtime polymorphic allocators
| -rw-r--r-- | library/core/src/alloc/mod.rs | 5 | ||||
| -rw-r--r-- | src/test/ui/allocator/object-safe.rs | 13 |
2 files changed, 17 insertions, 1 deletions
diff --git a/library/core/src/alloc/mod.rs b/library/core/src/alloc/mod.rs index 045eb58d013..9c2a0146e2c 100644 --- a/library/core/src/alloc/mod.rs +++ b/library/core/src/alloc/mod.rs @@ -342,7 +342,10 @@ pub unsafe trait Allocator { /// /// The returned adaptor also implements `Allocator` and will simply borrow this. #[inline(always)] - fn by_ref(&self) -> &Self { + fn by_ref(&self) -> &Self + where + Self: Sized, + { self } } diff --git a/src/test/ui/allocator/object-safe.rs b/src/test/ui/allocator/object-safe.rs new file mode 100644 index 00000000000..fae7ab7fe33 --- /dev/null +++ b/src/test/ui/allocator/object-safe.rs @@ -0,0 +1,13 @@ +// run-pass + +// Check that `Allocator` is object safe, this allows for polymorphic allocators + +#![feature(allocator_api)] + +use std::alloc::{Allocator, System}; + +fn ensure_object_safe(_: &dyn Allocator) {} + +fn main() { + ensure_object_safe(&System); +} |
