-
Notifications
You must be signed in to change notification settings - Fork 12.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Subpart7 for async drop (major1) - library changes
- Loading branch information
Showing
5 changed files
with
106 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
#![unstable(feature = "async_drop", issue = "126482")] | ||
|
||
#[allow(unused_imports)] | ||
use core::future::Future; | ||
|
||
#[allow(unused_imports)] | ||
use crate::pin::Pin; | ||
#[allow(unused_imports)] | ||
use crate::task::{Context, Poll}; | ||
|
||
/// Async version of Drop trait. | ||
/// | ||
/// When a value is no longer needed, Rust will run a "destructor" on that value. | ||
/// The most common way that a value is no longer needed is when it goes out of | ||
/// scope. Destructors may still run in other circumstances, but we're going to | ||
/// focus on scope for the examples here. To learn about some of those other cases, | ||
/// please see [the reference] section on destructors. | ||
/// | ||
/// [the reference]: https://doc.rust-lang.org/reference/destructors.html | ||
/// | ||
/// ## `Copy` and ([`Drop`]|`AsyncDrop`) are exclusive | ||
/// | ||
/// You cannot implement both [`Copy`] and ([`Drop`]|`AsyncDrop`) on the same type. Types that | ||
/// are `Copy` get implicitly duplicated by the compiler, making it very | ||
/// hard to predict when, and how often destructors will be executed. As such, | ||
/// these types cannot have destructors. | ||
#[cfg(not(bootstrap))] | ||
#[unstable(feature = "async_drop", issue = "126482")] | ||
#[lang = "async_drop"] | ||
pub trait AsyncDrop { | ||
/// Executes the async destructor for this type. | ||
/// | ||
/// This method is called implicitly when the value goes out of scope, | ||
/// and cannot be called explicitly. | ||
/// | ||
/// When this method has been called, `self` has not yet been deallocated. | ||
/// That only happens after the method is over. | ||
/// | ||
/// # Panics | ||
#[allow(async_fn_in_trait)] | ||
async fn drop(self: Pin<&mut Self>); | ||
} | ||
|
||
/// Async drop. | ||
#[cfg(not(bootstrap))] | ||
#[unstable(feature = "async_drop", issue = "126482")] | ||
#[lang = "async_drop_in_place"] | ||
pub async unsafe fn async_drop_in_place<T: ?Sized>(_to_drop: *mut T) { | ||
// Code here does not matter - this is replaced by the | ||
// real implementation by the compiler. | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
//@ edition: 2021 | ||
|
||
use std::future::AsyncDrop; //~ ERROR use of unstable library feature 'async_drop' | ||
use std::pin::Pin; | ||
|
||
struct Foo {} | ||
|
||
impl Drop for Foo { | ||
fn drop(&mut self) {} | ||
} | ||
|
||
impl AsyncDrop for Foo { //~ ERROR use of unstable library feature 'async_drop' | ||
async fn drop(self: Pin<&mut Self>) {} //~ ERROR use of unstable library feature 'async_drop' | ||
} | ||
|
||
fn main() {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
error[E0658]: use of unstable library feature 'async_drop' | ||
--> $DIR/feature-gate-async-drop.rs:3:5 | ||
| | ||
LL | use std::future::AsyncDrop; | ||
| ^^^^^^^^^^^^^^^^^^^^^^ | ||
| | ||
= note: see issue #126482 <https://github.com/rust-lang/rust/issues/126482> for more information | ||
= help: add `#![feature(async_drop)]` to the crate attributes to enable | ||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date | ||
|
||
error[E0658]: use of unstable library feature 'async_drop' | ||
--> $DIR/feature-gate-async-drop.rs:13:5 | ||
| | ||
LL | async fn drop(self: Pin<&mut Self>) {} | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
| | ||
= note: see issue #126482 <https://github.com/rust-lang/rust/issues/126482> for more information | ||
= help: add `#![feature(async_drop)]` to the crate attributes to enable | ||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date | ||
|
||
error[E0658]: use of unstable library feature 'async_drop' | ||
--> $DIR/feature-gate-async-drop.rs:12:6 | ||
| | ||
LL | impl AsyncDrop for Foo { | ||
| ^^^^^^^^^ | ||
| | ||
= note: see issue #126482 <https://github.com/rust-lang/rust/issues/126482> for more information | ||
= help: add `#![feature(async_drop)]` to the crate attributes to enable | ||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date | ||
|
||
error: aborting due to 3 previous errors | ||
|
||
For more information about this error, try `rustc --explain E0658`. |