Skip to content

Document that ManuallyDrop's Box interaction has been fixed - #155750

Merged
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
WaffleLapkin:manually-drop-unbox
Jun 15, 2026
Merged

Document that ManuallyDrop's Box interaction has been fixed#155750
rust-bors[bot] merged 3 commits into
rust-lang:mainfrom
WaffleLapkin:manually-drop-unbox

Conversation

@WaffleLapkin

@WaffleLapkin WaffleLapkin commented Apr 24, 2026

Copy link
Copy Markdown
Member

View all comments

Both #150447 and #150446 has been merged in 1.96.0, fixing the unfortunate ManuallyDrop<Box<_>> behavior.

cc @RalfJung

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Apr 24, 2026
@rustbot

rustbot commented Apr 24, 2026

Copy link
Copy Markdown
Collaborator

r? @jhpratt

rustbot has assigned @jhpratt.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: @scottmcm, libs
  • @scottmcm, libs expanded to 7 candidates
  • Random selection from Mark-Simulacrum, jhpratt, scottmcm

@jhpratt

jhpratt commented Apr 26, 2026

Copy link
Copy Markdown
Member

@bors r+ rollup

@rust-bors

rust-bors Bot commented Apr 26, 2026

Copy link
Copy Markdown
Contributor

📌 Commit 8520b8e has been approved by jhpratt

It is now in the queue for this repository.

@rust-bors rust-bors Bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Apr 26, 2026
jhpratt added a commit to jhpratt/rust that referenced this pull request Apr 26, 2026
…r=jhpratt

Document that `ManuallyDrop`'s `Box` interaction has been fixed

Both rust-lang#150447 and rust-lang#150446 has been merged in `1.96.0`, fixing the unfortunate `ManuallyDrop<Box<_>>` behavior.

cc @RalfJung
rust-bors Bot pushed a commit that referenced this pull request Apr 26, 2026
Rollup of 2 pull requests

Successful merges:

 - #155750 (Document that `ManuallyDrop`'s `Box` interaction has been fixed)
 - #155774 (std: maintain `CStringArray` null-termination even if `Vec::push` panics)
@RalfJung

Copy link
Copy Markdown
Member

@bors r-

Uh no we can't yet make this a stable guarantee I don't think.

@rust-bors rust-bors Bot added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Apr 26, 2026
@rust-bors

rust-bors Bot commented Apr 26, 2026

Copy link
Copy Markdown
Contributor

This pull request was unapproved.

This PR was contained in a rollup (#155807), which was unapproved.

View changes since this unapproval

Comment thread library/core/src/mem/manually_drop.rs
@RalfJung

Copy link
Copy Markdown
Member

If we make this a stable guarantee then even if MaybeDangling ends up getting rejected, we are committing to having something like this in the language permanently. This should hence go through FCP, for both lang and libs-api I assume.

@RalfJung RalfJung added I-lang-nominated Nominated for discussion during a lang team meeting. I-libs-api-nominated [DEPRECATED; DO NOT USE] labels Apr 26, 2026
@nia-e

nia-e commented Apr 28, 2026

Copy link
Copy Markdown
Member

This definitely requires signoff from lang, but if they are willing to preserve MaybeDangling or similar semantics into the future we're happy making the API guarantee on the libs-api side per today's meeting ^^

@nia-e nia-e removed the I-libs-api-nominated [DEPRECATED; DO NOT USE] label Apr 28, 2026
@traviscross traviscross added P-lang-drag-1 Lang team prioritization drag level 1. https://rust-lang.zulipchat.com/#narrow/channel/410516-t-lang T-lang Relevant to the language team T-libs-api [DEPRECATED; DO NOT USE] I-lang-radar Items that are on lang's radar and will need eventual work or consideration. labels Apr 29, 2026
@traviscross

Copy link
Copy Markdown
Contributor

Thanks @WaffleLapkin. Sounds right to me. This is a kind of partial stabilization of RFC 3336.

@rfcbot fcp merge libs-api

@rust-rfcbot

This comment was marked as outdated.

@WaffleLapkin WaffleLapkin removed S-waiting-on-fcp Status: PR is in FCP and is awaiting for FCP to complete. needs-reference-pr This language change needs an approved Reference PR to proceed. labels Jun 15, 2026
@WaffleLapkin

Copy link
Copy Markdown
Member Author

@bors r=jhpratt rollup

@rust-bors

rust-bors Bot commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

📌 Commit 5afb1df has been approved by jhpratt

It is now in the queue for this repository.

@rust-bors rust-bors Bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jun 15, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Jun 15, 2026
…r=jhpratt

Document that `ManuallyDrop`'s `Box` interaction has been fixed

Both rust-lang#150447 and rust-lang#150446 has been merged in `1.96.0`, fixing the unfortunate `ManuallyDrop<Box<_>>` behavior.

cc @RalfJung
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull request Jun 15, 2026
…r=jhpratt

Document that `ManuallyDrop`'s `Box` interaction has been fixed

Both rust-lang#150447 and rust-lang#150446 has been merged in `1.96.0`, fixing the unfortunate `ManuallyDrop<Box<_>>` behavior.

cc @RalfJung
@traviscross traviscross added needs-reference-pr This language change needs an approved Reference PR to proceed. missed-reference-pr This language change needed a Reference PR and was merged without it. labels Jun 15, 2026
rust-bors Bot pushed a commit that referenced this pull request Jun 15, 2026
Rollup of 13 pull requests

Successful merges:

 - #152544 (Stabilize `int_format_into` feature)
 - #157507 (fixed: differentiation between uninitialized and possibly uninitialized)
 - #155750 (Document that `ManuallyDrop`'s `Box` interaction has been fixed)
 - #157075 (lower edition requirements for some async-closure test helpers)
 - #157627 (remove LLVM `va_end` calls)
 - #157660 (normalize instead of evaluating type const patterns)
 - #157692 (Don't emit `unused_parens` suggestion for proc-macro-synthesized parens around bounds)
 - #157908 (fix binding const argument to assoc type suggestion)
 - #157915 (scalable vecs size incl. num vecs + no sret for scalable vecs)
 - #157916 (Avoid ICE on invalid crate-level cfg_attr predicates)
 - #157919 (mention in the `extern "tail"` error that it's supported on x86)
 - #157920 (mailmap: add mu001999)
 - #157924 (Update books)
@rust-bors
rust-bors Bot merged commit 17728da into rust-lang:main Jun 15, 2026
13 checks passed
@rustbot rustbot added this to the 1.98.0 milestone Jun 16, 2026
rust-timer added a commit that referenced this pull request Jun 16, 2026
Rollup merge of #155750 - WaffleLapkin:manually-drop-unbox, r=jhpratt

Document that `ManuallyDrop`'s `Box` interaction has been fixed

Both #150447 and #150446 has been merged in `1.96.0`, fixing the unfortunate `ManuallyDrop<Box<_>>` behavior.

cc @RalfJung
@theemathas

Copy link
Copy Markdown
Contributor

@traviscross See #155750 (comment)

@theemathas theemathas removed needs-reference-pr This language change needs an approved Reference PR to proceed. missed-reference-pr This language change needed a Reference PR and was merged without it. labels Jun 16, 2026
@traviscross

Copy link
Copy Markdown
Contributor

Thanks. I didn't see @WaffleLapkin's comment when readding the labels.

At the time that I applied the needs-reference-pr label, originally, it did not block merging (that happened later, as I now see, in #157798), so it was not my intention to block the merge by automated means.

It is my opinion that the Reference needs to be updated for this PR (though I'm not asking anyone else to do that). In fact, RFC 3336, the basis for this stabilization, describes Reference changes it requires. Specifically, we need to update Behavior Considered Undefined. Just as we have carve-outs for UnsafeCell<T>, we need certain carve-outs for ManuallyDrop<T> now. And we should add ManuallyDrop<T> to Special Types and Traits, just as we did for UnsafeCell<T>.

I'm going to add back both labels. This is for @rust-lang/lang-docs tracking.

@traviscross traviscross added needs-reference-pr This language change needs an approved Reference PR to proceed. missed-reference-pr This language change needed a Reference PR and was merged without it. labels Jun 16, 2026
@traviscross

Copy link
Copy Markdown
Contributor

cc @rust-lang/fls

@WaffleLapkin
WaffleLapkin deleted the manually-drop-unbox branch June 16, 2026 11:44
@RalfJung

RalfJung commented Aug 8, 2026

Copy link
Copy Markdown
Member

This should probably have included @rust-lang/opsem in the FCP... here's a retroactive ping, sorry for the lapse.

tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Aug 21, 2026
This MR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [rust](https://github.com/rust-lang/rust) | tools | minor | `1.97.1` → `1.98.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>rust-lang/rust (rust)</summary>

### [`v1.98.0`](https://github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1980-2026-08-20)

[Compare Source](rust-lang/rust@1.97.1...1.98.0)

\==========================

<a id="1.98.0-Language"></a>

## Language

- [Allow shortening lifetime of `&mut` when unsize-coercing, even in an invariant position.](rust-lang/rust#149219) For example, you can now coerce a `Cell<&'long mut i32>` to a `Cell<&'short mut dyn Send>`. Such shortenings were already previously allowed when coercing a `&mut` to a `&`, or coercing a `&` to a `&`.
- [Add deny-by-default `invalid_runtime_symbol_definitions` lint and warn-by-default `suspicious_runtime_symbol_definitions` lint](rust-lang/rust#155521)
  - The lints currently specifically targets `core` runtime symbols like `memcmp`, `memset`, `strlen`, ... and is planned to be expanded in the next few releases.
- [Add warn-by-default `c_void_returns` lint to check `core::ffi::c_void` as a return type](rust-lang/rust#156379)

<a id="1.98.0-Platform-Support"></a>

## Platform Support

- [Add `powerpc64-unknown-linux-gnuelfv2` as Tier 3](rust-lang/rust#144220)
- [Add `aarch64-unknown-linux-pauthtest` as Tier 3 target](rust-lang/rust#155722)
- [Promote `thumbv7a-none-eabi` to Tier 2](rust-lang/rust#155763)
- [Promote `thumbv7a-none-eabihf` to Tier 2](rust-lang/rust#155763)
- [Promote `thumbv7r-none-eabi` to Tier 2](rust-lang/rust#155763)
- [Promote `thumbv7r-none-eabihf` to Tier 2](rust-lang/rust#155763)
- [Promote `thumbv8r-none-eabihf` to Tier 2](rust-lang/rust#155763)

Refer to Rust's [platform support page][platform-support-doc]
for more information on Rust's tiered platform support.

[platform-support-doc]: https://doc.rust-lang.org/rustc/platform-support.html

<a id="1.98.0-Libraries"></a>

## Libraries

- [Change `Location<'_>` lifetime to `'static` in `Panic[Hook]Info`](rust-lang/rust#146561)
- [Document panic in `RangeInclusive::from(legacy::RangeInclusive)`](rust-lang/rust#155421)
- [Document that `ManuallyDrop`'s `Box` interaction has been fixed](rust-lang/rust#155750)
- [Stabilize LoongArch CRC Intrinsics](rust-lang/rust#156908)
- [The `derive` macro is available at `{core,std}::derive`.](rust-lang/rust#154645) This was previously [unintentionally stabilized in 1.96](rust-lang/rust#159856), but is now [explicitly accepted](rust-lang/rust#154645) as a stabilized API.
  - Please note that the MSRV for `{core,std}::derive` will be 1.96, and not 1.98.

<a id="1.98.0-Stabilized-APIs"></a>

## Stabilized APIs

- [`str::substr_range`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.substr_range)
- [`[T]::subslice_range`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.subslice_range)
- [`core::fmt::NumBuffer`](https://doc.rust-lang.org/stable/core/fmt/struct.NumBuffer.html)
- [`<{integer}>::format_into`](https://doc.rust-lang.org/stable/core/primitive.usize.html#method.format_into)
- [`Send/Sync for std::process::CommandArgs`](https://doc.rust-lang.org/stable/std/process/struct.CommandArgs.html#impl-Send-for-CommandArgs%3C'a%3E)
- [`{fN}::algebraic_add`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_add)
- [`{fN}::algebraic_sub`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_sub)
- [`{fN}::algebraic_mul`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_mul)
- [`{fN}::algebraic_div`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_div)
- [`{fN}::algebraic_rem`](https://doc.rust-lang.org/stable/core/primitive.f32.html#method.algebraic_rem)
- [`NonZero<{integer}>::from_str_radix`](https://doc.rust-lang.org/stable/core/num/struct.NonZero.html#method.from_str_radix-4)
- [`String::from_utf16le`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16le)
- [`String::from_utf16le_lossy`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16le_lossy)
- [`String::from_utf16be`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16be)
- [`String::from_utf16be_lossy`](https://doc.rust-lang.org/stable/std/string/struct.String.html#method.from_utf16be_lossy)
- [`[T]::strip_circumfix`](https://doc.rust-lang.org/stable/core/primitive.slice.html#method.strip_circumfix)
- [`str::strip_circumfix`](https://doc.rust-lang.org/stable/core/primitive.str.html#method.strip_circumfix)
- [`Atomic<T>::from_mut`](https://doc.rust-lang.org/stable/core/sync/atomic/struct.Atomic.html#method.from_mut)
- [`Atomic<T>::get_mut_slice`](https://doc.rust-lang.org/stable/core/sync/atomic/struct.Atomic.html#method.get_mut_slice)
- [`Atomic<T>::from_mut_slice`](https://doc.rust-lang.org/stable/core/sync/atomic/struct.Atomic.html#method.from_mut_slice)
- [`std::range::legacy`](https://doc.rust-lang.org/stable/std/range/legacy/index.html)

<a id="1.98.0-Compatibility-Notes"></a>

## Compatibility Notes

- [If fully elided, lifetime bounds of trait object types may now resolve differently or even get rejected in very specific niche scenarios](rust-lang/rust#129543)
- [Error in more cases of ambiguous imports](rust-lang/rust#145108)
- [Switch the destructors implementation for thread locals on Windows to use Fiber Local Storage (FLS)](rust-lang/rust#148799)
- [Convert some cases of the `ambiguous_glob_imports` lint into a hard error](rust-lang/rust#149195)
- [Where-bounds of the form `Type = Type` and `Type == Type` are no longer syntactically allowed](rust-lang/rust#153513)
- [Ensure Send/Sync is not implemented for std::env::Vars{,Os}](rust-lang/rust#155153)
- [Fix that in some attributes, arguments were not properly rejected](rust-lang/rust#155193)
- [`repr(transparent)` is now more strict about which fields have "trivial" layout and hence can be ignored: `repr(C)` types, types with private fields, and `#[non_exhaustive]` types are no longer considered "trivial"](rust-lang/rust#155299)
- [Correctly check whether types have equal size in `transmute()` when some `repr` attributes are involved.](rust-lang/rust#155418)
- [More characters are escaped when printing strings and chars](rust-lang/rust#155527)
- [Implement fast path for `derive(PartialOrd)` when deriving `Ord`](rust-lang/rust#155598)
  This can break crates in practice where a type's PartialOrd and Ord impls were inconsistent with each other.
- [Add temporary scope to `assert_eq` and `assert_ne`](rust-lang/rust#155739)
- Closed a hole in the pattern matching [structural equality](https://doc.rust-lang.org/reference/patterns.html#constant-patterns) check, preventing cases where a match of a constant would be allowed, despite disagreeing with a manually written `PartialEq` implementation, when a `derive(PartialEq)` implementation for that type also exists.
- [On Emscripten the WASM exception handling ABI is now unconditionally used](rust-lang/rust#156928) The `-Zemscripten-wasm-eh=false` flag to switch back to JS exceptions has been removed.
- [The UNSAFE\_CODE lint is now consistently emitted for all unsafe attributes](rust-lang/rust#157201)
- [Solaris: remove `File::lock` implementation, it has the wrong semantics (return "unsupported" instead)](rust-lang/rust#157509)
- [Windows-gnu targets now specify baseline tools versions](rust-lang/rust#158020)
- [rustfmt now discovers module files that are defined in `cfg_select!`](rust-lang/rust#158372)
  This may cause more code to be formatted which was previously ignored.

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yODguMCIsInVwZGF0ZWRJblZlciI6IjQzLjI4OC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiLCJhdXRvbWF0aW9uOmJvdC1hdXRob3JlZCIsImRlcGVuZGVuY3ktdHlwZTo6bWlub3IiXX0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. finished-final-comment-period The final comment period is finished for this PR / Issue. I-lang-radar Items that are on lang's radar and will need eventual work or consideration. missed-reference-pr This language change needed a Reference PR and was merged without it. needs-reference-pr This language change needs an approved Reference PR to proceed. relnotes Marks issues that should be documented in the release notes of the next release. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-lang Relevant to the language team T-libs Relevant to the library team, which will review and decide on the PR/issue. T-libs-api [DEPRECATED; DO NOT USE] to-announce Announce this issue on triage meeting

Projects

None yet

Development

Successfully merging this pull request may close these issues.