diff options
| author | Mark Rousskov <mark.simulacrum@gmail.com> | 2019-12-23 08:13:12 -0500 |
|---|---|---|
| committer | Mark Rousskov <mark.simulacrum@gmail.com> | 2019-12-23 09:04:00 -0500 |
| commit | a08df28a6fdb5a2c781f01082e630faa2d7ccde9 (patch) | |
| tree | 69160585205d409c2f619677dc6776a1bd003455 /src/libcore | |
| parent | a916ac22b9f7f1f0f7aba0a41a789b3ecd765018 (diff) | |
| download | rust-a08df28a6fdb5a2c781f01082e630faa2d7ccde9.tar.gz rust-a08df28a6fdb5a2c781f01082e630faa2d7ccde9.zip | |
Document that calling Drop, even after it panics, is UB
Diffstat (limited to 'src/libcore')
| -rw-r--r-- | src/libcore/ops/drop.rs | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/libcore/ops/drop.rs b/src/libcore/ops/drop.rs index eae63ea2390..5233b475c46 100644 --- a/src/libcore/ops/drop.rs +++ b/src/libcore/ops/drop.rs @@ -99,9 +99,15 @@ pub trait Drop { /// Given that a [`panic!`] will call `drop` as it unwinds, any [`panic!`] /// in a `drop` implementation will likely abort. /// + /// Note that even if this panics, the value is considered to be dropped; + /// you must not cause `drop` to be called again. This is normally automatically + /// handled by the compiler, but when using unsafe code, can sometimes occur + /// unintentionally, particularly when using [`std::ptr::drop_in_place`]. + /// /// [E0040]: ../../error-index.html#E0040 /// [`panic!`]: ../macro.panic.html /// [`std::mem::drop`]: ../../std/mem/fn.drop.html + /// [`std::ptr::drop_in_place`]: ../../std/ptr/fn.drop_in_place.html #[stable(feature = "rust1", since = "1.0.0")] fn drop(&mut self); } |
