Fix async drop glue for Box<T>#156067
Conversation
|
r? @oli-obk rustbot has assigned @oli-obk. Use Why was this reviewer chosen?The reviewer was selected based on:
|
This comment was marked as resolved.
This comment was marked as resolved.
This comment has been minimized.
This comment has been minimized.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
|
oof turns out I didn't see #145316 for 9 months. Gonna review that one first |
LMAO Ok gl |
|
@oli-obk can I close this? |
|
I'd like to land the sized-only version first. I don't know if the other PR's solution is different from yours. I'll need to compare and figure out whether either solution is one to merge |
|
Reminder, once the PR becomes ready for a review, use |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
|
This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. |
|
@rustbot ready |
|
@bors squash |
This comment has been minimized.
This comment has been minimized.
* Fix async drop glue for Box<T> * Adress reviewer concerns * Address more concerns
|
🔨 3 commits were squashed into 2bc5e90. |
56222cb to
2bc5e90
Compare
|
😅 right that works @bors r+ rollup |
Fix async drop glue for Box<T> Fixes rust-lang#143658. This fixes async drop behavior for boxed values so that async drop glue reaches the boxed value’s async destructor in async drop context. The change updates async-drop needs-drop analysis so `Box<T>` is handled specially for async drop by considering the boxed pointee and allocator when deciding whether async drop glue is needed. This PR intentionally does not change the broader AsyncDrop design. It only fixes behavior under the existing `#![feature(async_drop)]` implementation. Reviewer notes: - `async-drop-box-allocator.rs` already covers async-dropping the allocator of a `Box`; this PR adds distinct coverage for the boxed value itself. - Boxed dyn pointees are intentionally not pulled into this fix, preserving existing dynamic async-drop limitations. - The change is isolated to async drop analysis; sync `needs_drop` behavior is unchanged. @rustbot label F-async_drop
Rollup of 10 pull requests Successful merges: - #157335 (bootstrap: Handle dotted table keys when parsing bootstrap.toml) - #157503 (Disable `tests/debuginfo/pretty-std.rs` `OsString` cdb check) - #148183 (rustdoc: Test & document `test_harness` code block attribute) - #156067 (Fix async drop glue for Box<T>) - #156399 (fix improper ctypes in Znext solver) - #157410 (Implement rustc_public::CrateDef{,Type} for FieldDef) - #157605 (Arg splat experiment - syntax impl) - #157630 (Add multibyte JSON diagnostic regression test) - #157633 (Reorder `impl` restriction rendering and add bottom margin) - #157642 (Report duplicate relaxed bounds during ast lowering)
Fix async drop glue for Box<T> Fixes rust-lang#143658. This fixes async drop behavior for boxed values so that async drop glue reaches the boxed value’s async destructor in async drop context. The change updates async-drop needs-drop analysis so `Box<T>` is handled specially for async drop by considering the boxed pointee and allocator when deciding whether async drop glue is needed. This PR intentionally does not change the broader AsyncDrop design. It only fixes behavior under the existing `#![feature(async_drop)]` implementation. Reviewer notes: - `async-drop-box-allocator.rs` already covers async-dropping the allocator of a `Box`; this PR adds distinct coverage for the boxed value itself. - Boxed dyn pointees are intentionally not pulled into this fix, preserving existing dynamic async-drop limitations. - The change is isolated to async drop analysis; sync `needs_drop` behavior is unchanged. @rustbot label F-async_drop
Fix async drop glue for Box<T> Fixes rust-lang#143658. This fixes async drop behavior for boxed values so that async drop glue reaches the boxed value’s async destructor in async drop context. The change updates async-drop needs-drop analysis so `Box<T>` is handled specially for async drop by considering the boxed pointee and allocator when deciding whether async drop glue is needed. This PR intentionally does not change the broader AsyncDrop design. It only fixes behavior under the existing `#![feature(async_drop)]` implementation. Reviewer notes: - `async-drop-box-allocator.rs` already covers async-dropping the allocator of a `Box`; this PR adds distinct coverage for the boxed value itself. - Boxed dyn pointees are intentionally not pulled into this fix, preserving existing dynamic async-drop limitations. - The change is isolated to async drop analysis; sync `needs_drop` behavior is unchanged. @rustbot label F-async_drop
Rollup of 18 pull requests Successful merges: - #152852 (Remove driver_lint_caps) - #157166 (Change type of async context parameter after state transform.) - #157335 (bootstrap: Handle dotted table keys when parsing bootstrap.toml) - #157503 (Disable `tests/debuginfo/pretty-std.rs` `OsString` cdb check) - #157571 (Remove ProcMacro enum from proc macro ABI) - #148183 (rustdoc: Test & document `test_harness` code block attribute) - #153847 (Fix marker trait winnowing depending on impl order) - #156067 (Fix async drop glue for Box<T>) - #156399 (fix improper ctypes in Znext solver) - #157338 (Make `Literal::byte_character_value` work with bytes as well) - #157410 (Implement rustc_public::CrateDef{,Type} for FieldDef) - #157605 (Arg splat experiment - syntax impl) - #157630 (Add multibyte JSON diagnostic regression test) - #157633 (Reorder `impl` restriction rendering and add bottom margin) - #157642 (Report duplicate relaxed bounds during ast lowering) - #157652 (fix doc for unicode normalization faq on `casefold` APIs) - #157661 (Update to ar_archive_writer v0.5.2) - #157668 (Add test for matches in `rustc_must_match_exhaustively`) Failed merges: - #157670 (Rename `errors.rs` file to `diagnostics.rs` (4/N))
Rollup of 17 pull requests Successful merges: - #157166 (Change type of async context parameter after state transform.) - #157335 (bootstrap: Handle dotted table keys when parsing bootstrap.toml) - #157503 (Disable `tests/debuginfo/pretty-std.rs` `OsString` cdb check) - #157571 (Remove ProcMacro enum from proc macro ABI) - #148183 (rustdoc: Test & document `test_harness` code block attribute) - #153847 (Fix marker trait winnowing depending on impl order) - #156067 (Fix async drop glue for Box<T>) - #156399 (fix improper ctypes in Znext solver) - #157338 (Make `Literal::byte_character_value` work with bytes as well) - #157410 (Implement rustc_public::CrateDef{,Type} for FieldDef) - #157605 (Arg splat experiment - syntax impl) - #157630 (Add multibyte JSON diagnostic regression test) - #157633 (Reorder `impl` restriction rendering and add bottom margin) - #157642 (Report duplicate relaxed bounds during ast lowering) - #157652 (fix doc for unicode normalization faq on `casefold` APIs) - #157661 (Update to ar_archive_writer v0.5.2) - #157668 (Add test for matches in `rustc_must_match_exhaustively`) Failed merges: - #157670 (Rename `errors.rs` file to `diagnostics.rs` (4/N))
Rollup of 17 pull requests Successful merges: - #157166 (Change type of async context parameter after state transform.) - #157335 (bootstrap: Handle dotted table keys when parsing bootstrap.toml) - #157503 (Disable `tests/debuginfo/pretty-std.rs` `OsString` cdb check) - #157571 (Remove ProcMacro enum from proc macro ABI) - #148183 (rustdoc: Test & document `test_harness` code block attribute) - #153847 (Fix marker trait winnowing depending on impl order) - #156067 (Fix async drop glue for Box<T>) - #156399 (fix improper ctypes in Znext solver) - #157338 (Make `Literal::byte_character_value` work with bytes as well) - #157410 (Implement rustc_public::CrateDef{,Type} for FieldDef) - #157605 (Arg splat experiment - syntax impl) - #157630 (Add multibyte JSON diagnostic regression test) - #157633 (Reorder `impl` restriction rendering and add bottom margin) - #157642 (Report duplicate relaxed bounds during ast lowering) - #157652 (fix doc for unicode normalization faq on `casefold` APIs) - #157661 (Update to ar_archive_writer v0.5.2) - #157668 (Add test for matches in `rustc_must_match_exhaustively`) Failed merges: - #157670 (Rename `errors.rs` file to `diagnostics.rs` (4/N))
Rollup of 17 pull requests Successful merges: - #157166 (Change type of async context parameter after state transform.) - #157335 (bootstrap: Handle dotted table keys when parsing bootstrap.toml) - #157503 (Disable `tests/debuginfo/pretty-std.rs` `OsString` cdb check) - #157571 (Remove ProcMacro enum from proc macro ABI) - #148183 (rustdoc: Test & document `test_harness` code block attribute) - #153847 (Fix marker trait winnowing depending on impl order) - #156067 (Fix async drop glue for Box<T>) - #156399 (fix improper ctypes in Znext solver) - #157338 (Make `Literal::byte_character_value` work with bytes as well) - #157410 (Implement rustc_public::CrateDef{,Type} for FieldDef) - #157605 (Arg splat experiment - syntax impl) - #157630 (Add multibyte JSON diagnostic regression test) - #157633 (Reorder `impl` restriction rendering and add bottom margin) - #157642 (Report duplicate relaxed bounds during ast lowering) - #157652 (fix doc for unicode normalization faq on `casefold` APIs) - #157661 (Update to ar_archive_writer v0.5.2) - #157668 (Add test for matches in `rustc_must_match_exhaustively`) Failed merges: - #157670 (Rename `errors.rs` file to `diagnostics.rs` (4/N))
Rollup of 17 pull requests Successful merges: - #157166 (Change type of async context parameter after state transform.) - #157335 (bootstrap: Handle dotted table keys when parsing bootstrap.toml) - #157503 (Disable `tests/debuginfo/pretty-std.rs` `OsString` cdb check) - #157571 (Remove ProcMacro enum from proc macro ABI) - #148183 (rustdoc: Test & document `test_harness` code block attribute) - #153847 (Fix marker trait winnowing depending on impl order) - #156067 (Fix async drop glue for Box<T>) - #156399 (fix improper ctypes in Znext solver) - #157338 (Make `Literal::byte_character_value` work with bytes as well) - #157410 (Implement rustc_public::CrateDef{,Type} for FieldDef) - #157605 (Arg splat experiment - syntax impl) - #157630 (Add multibyte JSON diagnostic regression test) - #157633 (Reorder `impl` restriction rendering and add bottom margin) - #157642 (Report duplicate relaxed bounds during ast lowering) - #157652 (fix doc for unicode normalization faq on `casefold` APIs) - #157661 (Update to ar_archive_writer v0.5.2) - #157668 (Add test for matches in `rustc_must_match_exhaustively`) Failed merges: - #157670 (Rename `errors.rs` file to `diagnostics.rs` (4/N))
Rollup of 17 pull requests Successful merges: - #157166 (Change type of async context parameter after state transform.) - #157335 (bootstrap: Handle dotted table keys when parsing bootstrap.toml) - #157503 (Disable `tests/debuginfo/pretty-std.rs` `OsString` cdb check) - #157571 (Remove ProcMacro enum from proc macro ABI) - #148183 (rustdoc: Test & document `test_harness` code block attribute) - #153847 (Fix marker trait winnowing depending on impl order) - #156067 (Fix async drop glue for Box<T>) - #156399 (fix improper ctypes in Znext solver) - #157338 (Make `Literal::byte_character_value` work with bytes as well) - #157410 (Implement rustc_public::CrateDef{,Type} for FieldDef) - #157605 (Arg splat experiment - syntax impl) - #157630 (Add multibyte JSON diagnostic regression test) - #157633 (Reorder `impl` restriction rendering and add bottom margin) - #157642 (Report duplicate relaxed bounds during ast lowering) - #157652 (fix doc for unicode normalization faq on `casefold` APIs) - #157661 (Update to ar_archive_writer v0.5.2) - #157668 (Add test for matches in `rustc_must_match_exhaustively`) Failed merges: - #157670 (Rename `errors.rs` file to `diagnostics.rs` (4/N))
Rollup of 17 pull requests Successful merges: - #157166 (Change type of async context parameter after state transform.) - #157335 (bootstrap: Handle dotted table keys when parsing bootstrap.toml) - #157503 (Disable `tests/debuginfo/pretty-std.rs` `OsString` cdb check) - #157571 (Remove ProcMacro enum from proc macro ABI) - #148183 (rustdoc: Test & document `test_harness` code block attribute) - #153847 (Fix marker trait winnowing depending on impl order) - #156067 (Fix async drop glue for Box<T>) - #156399 (fix improper ctypes in Znext solver) - #157338 (Make `Literal::byte_character_value` work with bytes as well) - #157410 (Implement rustc_public::CrateDef{,Type} for FieldDef) - #157605 (Arg splat experiment - syntax impl) - #157630 (Add multibyte JSON diagnostic regression test) - #157633 (Reorder `impl` restriction rendering and add bottom margin) - #157642 (Report duplicate relaxed bounds during ast lowering) - #157652 (fix doc for unicode normalization faq on `casefold` APIs) - #157661 (Update to ar_archive_writer v0.5.2) - #157668 (Add test for matches in `rustc_must_match_exhaustively`) Failed merges: - #157670 (Rename `errors.rs` file to `diagnostics.rs` (4/N))
Rollup of 17 pull requests Successful merges: - #157166 (Change type of async context parameter after state transform.) - #157335 (bootstrap: Handle dotted table keys when parsing bootstrap.toml) - #157503 (Disable `tests/debuginfo/pretty-std.rs` `OsString` cdb check) - #157571 (Remove ProcMacro enum from proc macro ABI) - #148183 (rustdoc: Test & document `test_harness` code block attribute) - #153847 (Fix marker trait winnowing depending on impl order) - #156067 (Fix async drop glue for Box<T>) - #156399 (fix improper ctypes in Znext solver) - #157338 (Make `Literal::byte_character_value` work with bytes as well) - #157410 (Implement rustc_public::CrateDef{,Type} for FieldDef) - #157605 (Arg splat experiment - syntax impl) - #157630 (Add multibyte JSON diagnostic regression test) - #157633 (Reorder `impl` restriction rendering and add bottom margin) - #157642 (Report duplicate relaxed bounds during ast lowering) - #157652 (fix doc for unicode normalization faq on `casefold` APIs) - #157661 (Update to ar_archive_writer v0.5.2) - #157668 (Add test for matches in `rustc_must_match_exhaustively`) Failed merges: - #157670 (Rename `errors.rs` file to `diagnostics.rs` (4/N))
Rollup of 17 pull requests Successful merges: - #157166 (Change type of async context parameter after state transform.) - #157335 (bootstrap: Handle dotted table keys when parsing bootstrap.toml) - #157503 (Disable `tests/debuginfo/pretty-std.rs` `OsString` cdb check) - #157571 (Remove ProcMacro enum from proc macro ABI) - #148183 (rustdoc: Test & document `test_harness` code block attribute) - #153847 (Fix marker trait winnowing depending on impl order) - #156067 (Fix async drop glue for Box<T>) - #156399 (fix improper ctypes in Znext solver) - #157338 (Make `Literal::byte_character_value` work with bytes as well) - #157410 (Implement rustc_public::CrateDef{,Type} for FieldDef) - #157605 (Arg splat experiment - syntax impl) - #157630 (Add multibyte JSON diagnostic regression test) - #157633 (Reorder `impl` restriction rendering and add bottom margin) - #157642 (Report duplicate relaxed bounds during ast lowering) - #157652 (fix doc for unicode normalization faq on `casefold` APIs) - #157661 (Update to ar_archive_writer v0.5.2) - #157668 (Add test for matches in `rustc_must_match_exhaustively`) Failed merges: - #157670 (Rename `errors.rs` file to `diagnostics.rs` (4/N))
Rollup merge of #156067 - P8L1:async-drop-box-fix, r=oli-obk Fix async drop glue for Box<T> Fixes #143658. This fixes async drop behavior for boxed values so that async drop glue reaches the boxed value’s async destructor in async drop context. The change updates async-drop needs-drop analysis so `Box<T>` is handled specially for async drop by considering the boxed pointee and allocator when deciding whether async drop glue is needed. This PR intentionally does not change the broader AsyncDrop design. It only fixes behavior under the existing `#![feature(async_drop)]` implementation. Reviewer notes: - `async-drop-box-allocator.rs` already covers async-dropping the allocator of a `Box`; this PR adds distinct coverage for the boxed value itself. - Boxed dyn pointees are intentionally not pulled into this fix, preserving existing dynamic async-drop limitations. - The change is isolated to async drop analysis; sync `needs_drop` behavior is unchanged. @rustbot label F-async_drop
View all comments
Fixes #143658.
This fixes async drop behavior for boxed values so that async drop glue reaches the boxed value’s async destructor in async drop context.
The change updates async-drop needs-drop analysis so
Box<T>is handled specially for async drop by considering the boxed pointee and allocator when deciding whether async drop glue is needed.This PR intentionally does not change the broader AsyncDrop design. It only fixes behavior under the existing
#![feature(async_drop)]implementation.Reviewer notes:
async-drop-box-allocator.rsalready covers async-dropping the allocator of aBox; this PR adds distinct coverage for the boxed value itself.needs_dropbehavior is unchanged.@rustbot label F-async_drop