Skip to content

Commit 3547e8c

Browse files
committed
don't use drop_in_place as an intrinsic
1 parent 9ee846b commit 3547e8c

File tree

8 files changed

+18
-17
lines changed

8 files changed

+18
-17
lines changed

src/doc/nomicon/destructors.md

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,10 @@ this is totally fine.
2626
For instance, a custom implementation of `Box` might write `Drop` like this:
2727

2828
```rust
29-
#![feature(heap_api, core_intrinsics, unique)]
29+
#![feature(heap_api, drop_in_place, unique)]
3030

3131
use std::rt::heap;
32-
use std::ptr::Unique;
33-
use std::intrinsics::drop_in_place;
32+
use std::ptr::{drop_in_place, Unique};
3433
use std::mem;
3534

3635
struct Box<T>{ ptr: Unique<T> }
@@ -54,11 +53,10 @@ use-after-free the `ptr` because when drop exits, it becomes inacessible.
5453
However this wouldn't work:
5554

5655
```rust
57-
#![feature(heap_api, core_intrinsics, unique)]
56+
#![feature(heap_api, drop_in_place, unique)]
5857

5958
use std::rt::heap;
60-
use std::ptr::Unique;
61-
use std::intrinsics::drop_in_place;
59+
use std::ptr::{drop_in_place, Unique};
6260
use std::mem;
6361

6462
struct Box<T>{ ptr: Unique<T> }
@@ -129,11 +127,10 @@ The classic safe solution to overriding recursive drop and allowing moving out
129127
of Self during `drop` is to use an Option:
130128

131129
```rust
132-
#![feature(heap_api, core_intrinsics, unique)]
130+
#![feature(heap_api, drop_in_place, unique)]
133131

134132
use std::rt::heap;
135-
use std::ptr::Unique;
136-
use std::intrinsics::drop_in_place;
133+
use std::ptr::{drop_in_place, Unique};
137134
use std::mem;
138135

139136
struct Box<T>{ ptr: Unique<T> }

src/liballoc/arc.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ use core::atomic::Ordering::{Relaxed, Release, Acquire, SeqCst};
7676
use core::fmt;
7777
use core::cmp::Ordering;
7878
use core::mem::{align_of_val, size_of_val};
79-
use core::intrinsics::{drop_in_place, abort};
79+
use core::intrinsics::abort;
8080
use core::mem;
8181
use core::nonzero::NonZero;
8282
use core::ops::{Deref, CoerceUnsized};
@@ -265,7 +265,7 @@ impl<T: ?Sized> Arc<T> {
265265

266266
// Destroy the data at this time, even though we may not free the box
267267
// allocation itself (there may still be weak pointers lying around).
268-
drop_in_place(&mut (*ptr).data);
268+
ptr::drop_in_place(&mut (*ptr).data);
269269

270270
if self.inner().weak.fetch_sub(1, Release) == 1 {
271271
atomic::fence(Acquire);

src/liballoc/rc.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ use core::cell::Cell;
159159
use core::cmp::Ordering;
160160
use core::fmt;
161161
use core::hash::{Hasher, Hash};
162-
use core::intrinsics::{assume, drop_in_place, abort};
162+
use core::intrinsics::{assume, abort};
163163
use core::marker::{self, Unsize};
164164
use core::mem::{self, align_of, size_of, align_of_val, size_of_val, forget};
165165
use core::nonzero::NonZero;
@@ -417,7 +417,7 @@ impl<T: ?Sized> Drop for Rc<T> {
417417
self.dec_strong();
418418
if self.strong() == 0 {
419419
// destroy the contained object
420-
drop_in_place(&mut (*ptr).value);
420+
ptr::drop_in_place(&mut (*ptr).value);
421421

422422
// remove the implicit "strong weak" pointer now that we've
423423
// destroyed the contents.

src/libcollections/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@
5656
#![feature(unique)]
5757
#![feature(unsafe_no_drop_flag, filling_drop)]
5858
#![feature(utf8_error)]
59+
#![feature(drop_in_place)]
60+
5961
#![cfg_attr(test, feature(rand, test))]
6062

6163
#![feature(no_std)]

src/libcollections/vec.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ use alloc::heap::EMPTY;
6565
use core::cmp::Ordering;
6666
use core::fmt;
6767
use core::hash::{self, Hash};
68-
use core::intrinsics::{arith_offset, assume, drop_in_place};
68+
use core::intrinsics::{arith_offset, assume};
6969
use core::iter::FromIterator;
7070
use core::mem;
7171
use core::ops::{Index, IndexMut, Deref};
@@ -1329,7 +1329,7 @@ impl<T> Drop for Vec<T> {
13291329
// don't need unsafe_no_drop_flag shenanigans anymore.
13301330
if self.buf.unsafe_no_drop_flag_needs_drop() {
13311331
for x in self.iter_mut() {
1332-
unsafe { drop_in_place(x); }
1332+
unsafe { ptr::drop_in_place(x); }
13331333
}
13341334
}
13351335
// RawVec handles deallocation

src/libstd/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,8 @@
245245
#![feature(vec_resize)]
246246
#![feature(wrapping)]
247247
#![feature(zero_one)]
248+
#![feature(drop_in_place)]
249+
248250
#![cfg_attr(windows, feature(str_utf16))]
249251
#![cfg_attr(test, feature(float_from_str_radix, range_inclusive, float_extras, hash_default))]
250252
#![cfg_attr(test, feature(test, rustc_private, float_consts))]

src/libstd/thread/local.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ mod imp {
411411
if cfg!(target_os = "macos") {
412412
ptr::read((*ptr).inner.get());
413413
} else {
414-
intrinsics::drop_in_place((*ptr).inner.get());
414+
ptr::drop_in_place((*ptr).inner.get());
415415
}
416416
}
417417
}

src/test/run-pass/extern_fat_drop.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
// aux-build:fat_drop.rs
1212

13-
#![feature(core_intrinsics)]
13+
#![feature(core_intrinsics, drop_in_place)]
1414

1515
extern crate fat_drop;
1616

0 commit comments

Comments
 (0)