Make sure we handle backwards_incompatible_lint
drops appropriately in drop elaboration by compiler-errors · Pull Request #134486 · rust-lang/rust (original) (raw)
In #131326, a new kind of scheduled drop (drop_kind: DropKind::Value
+ backwards_incompatible_lint: true
) was added so that we could insert a new kind of no-op MIR statement (backward incompatible drop
) for linting purposes.
These drops were intended to have no side-effects, but drop elaboration code forgot to handle these drops specially and they were handled otherwise as normal drops in most of the code. This ends up being unsound since we insert more than one drop call for some values, which means that Drop::drop
could be called more than once.
This PR fixes this by splitting out the DropKind::ForLint
and adjusting the code. I'm not totally certain if all of the places I've adjusted are either reachable or correct, but I'm pretty certain that it's more correct than it was previously.
cc @dingxiangfei2009
r? nikomatsakis
Fixes #134482