FEAT: Update nodrop for stable needs_drop

This commit is contained in:
bluss
2017-10-16 22:13:53 +02:00
parent f9a9158185
commit 545ae6e609
3 changed files with 53 additions and 5 deletions
+1
View File
@@ -8,6 +8,7 @@ matrix:
- rust: stable - rust: stable
env: env:
- NODEFAULT=1 - NODEFAULT=1
- NODROP_FEATURES='use_needs_drop'
- rust: beta - rust: beta
- rust: nightly - rust: nightly
env: env:
+50
View File
@@ -0,0 +1,50 @@
nodrop
======
Recent Changes (nodrop)
-----------------------
-
- Update for stable ``needs_drop`` (Rust 1.21, was nightly only)
- 0.1.9
- Fix issue in recent nightly where ``repr(u8)`` did not work. Use
a better way to get rid of the enum layout optimization.
- 0.1.8
- Add crate feature ``use_union`` that uses untagged unions to implement NoDrop.
Finally we have an implementation without hacks, without a runtime flag,
and without an actual ``Drop`` impl (which was needed to suppress drop).
The crate feature requires nightly and is unstable.
- 0.1.7
- Remove crate feature ``no_drop_flag``, because it doesn't compile on nightly
anymore. Drop flags are gone anyway!
- 0.1.6
- Add feature std, which you can opt out of to use ``no_std``.
- 0.1.5
- Added crate feature ``use_needs_drop`` which is a nightly-only
optimization, which skips overwriting if the inner value does not need
drop.
License
=======
Dual-licensed to be compatible with the Rust project.
Licensed under the Apache License, Version 2.0
http://www.apache.org/licenses/LICENSE-2.0 or the MIT license
http://opensource.org/licenses/MIT, at your
option. This file may not be copied, modified, or distributed
except according to those terms.
+2 -5
View File
@@ -3,11 +3,10 @@
//! //!
//! - `std` //! - `std`
//! - Optional, enabled by default //! - Optional, enabled by default
//! - Requires Rust 1.6 *to disable*
//! - Use libstd //! - Use libstd
//! - `use_needs_drop` //! - `use_needs_drop`
//! - Optional //! - Optional
//! - Requires nightly channel. //! - Requires Rust 1.21
//! - Use `needs_drop` to skip overwriting if not necessary //! - Use `needs_drop` to skip overwriting if not necessary
//! - `use_union` //! - `use_union`
//! - Optional //! - Optional
@@ -16,8 +15,6 @@
//! for example the fact that `NoDrop<T>` never has a destructor anymore. //! for example the fact that `NoDrop<T>` never has a destructor anymore.
//! //!
#![cfg_attr(feature="use_needs_drop", feature(core_intrinsics))]
#![cfg_attr(not(any(test, feature="std")), no_std)] #![cfg_attr(not(any(test, feature="std")), no_std)]
#[cfg(not(any(test, feature="std")))] #[cfg(not(any(test, feature="std")))]
extern crate core as std; extern crate core as std;
@@ -81,7 +78,7 @@ mod imp {
#[inline] #[inline]
fn needs_drop<T>() -> bool { fn needs_drop<T>() -> bool {
unsafe { unsafe {
::std::intrinsics::needs_drop::<T>() ::std::mem::needs_drop::<T>()
} }
} }