librustc: Put #[unsafe_destructor] behind a feature gate.
Closes #8142. This is not the semantics we want long-term. You can continue to use `#[unsafe_destructor]`, but you'll need to add `#![feature(unsafe_destructor)]` to the crate attributes. [breaking-change]
This commit is contained in:
parent
6750eb5a05
commit
dcbf4ec2a1
36 changed files with 78 additions and 33 deletions
|
|
@ -192,6 +192,8 @@ As an example, we give a reimplementation of owned boxes by wrapping
|
|||
reimplementation is as safe as the `Box` type.
|
||||
|
||||
```
|
||||
#![feature(unsafe_destructor)]
|
||||
|
||||
extern crate libc;
|
||||
use libc::{c_void, size_t, malloc, free};
|
||||
use std::mem;
|
||||
|
|
@ -242,10 +244,12 @@ impl<T: Send> Unique<T> {
|
|||
// A key ingredient for safety, we associate a destructor with
|
||||
// Unique<T>, making the struct manage the raw pointer: when the
|
||||
// struct goes out of scope, it will automatically free the raw pointer.
|
||||
//
|
||||
// NB: This is an unsafe destructor, because rustc will not normally
|
||||
// allow destructors to be associated with parametrized types, due to
|
||||
// allow destructors to be associated with parameterized types, due to
|
||||
// bad interaction with managed boxes. (With the Send restriction,
|
||||
// we don't have this problem.)
|
||||
// we don't have this problem.) Note that the `#[unsafe_destructor]`
|
||||
// feature gate is required to use unsafe destructors.
|
||||
#[unsafe_destructor]
|
||||
impl<T: Send> Drop for Unique<T> {
|
||||
fn drop(&mut self) {
|
||||
|
|
|
|||
|
|
@ -1940,12 +1940,13 @@ interpreted:
|
|||
enum representation in C is undefined, and this may be incorrect when the C
|
||||
code is compiled with certain flags.
|
||||
- `simd` - on certain tuple structs, derive the arithmetic operators, which
|
||||
lower to the target's SIMD instructions, if any.
|
||||
lower to the target's SIMD instructions, if any; the `simd` feature gate
|
||||
is necessary to use this attribute.
|
||||
- `static_assert` - on statics whose type is `bool`, terminates compilation
|
||||
with an error if it is not initialized to `true`.
|
||||
- `unsafe_destructor` - allow implementations of the "drop" language item
|
||||
where the type it is implemented for does not implement the "send" language
|
||||
item.
|
||||
item; the `unsafe_destructor` feature gate is needed to use this attribute
|
||||
- `unsafe_no_drop_flag` - on structs, remove the flag that prevents
|
||||
destructors from being run twice. Destructors might be run multiple times on
|
||||
the same object with this attribute.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue