-
Notifications
You must be signed in to change notification settings - Fork 13.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Behavior of panicking Drop::drop is not properly documented #60611
Comments
@rustbot modify labels: T-lang T-doc |
cc @rust-lang/wg-unsafe-code-guidelines @rust-lang/lang |
Previous issue: #50765 And also: rust-lang/reference#348 |
Related: #60840 (comment)
|
https://doc.rust-lang.org/nightly/std/ops/trait.Drop.html#tymethod.drop currently includes This was added in ##67559 So I think this can be closed. |
Agreed, thanks for gathering the references. There are some discussions for further changes here, but those are already tracked elsewhere: |
It was decided in, I think, #14875, that
Drop::drop
can panic, and if this happens, the value must be leaked (at least in a generic context), that is, it cannot be re-dropped again and doing that could invoke UB (that's at least what generic unsafe code needs to assume).This does not appear to be documented anywhere. These semantics make the following snippet have undefined behavior due to double-drops (playground uses
T = Vec<HasDrop>
):To avoid UB, that snippet must be changed to unconditionally leak the value independently of whether
drop_in_place
succeeded or failed:cc @Centril - this might be a T-lang issue, I don't know the best way to word this, and I can't find any RFC designing this part of the language.
The text was updated successfully, but these errors were encountered: