diff options
| author | bors <bors@rust-lang.org> | 2018-08-02 15:34:21 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2018-08-02 15:34:21 +0000 |
| commit | 03da14ba8cd22acbcfe1cca617f6c274999e5e9e (patch) | |
| tree | a33c2439348b38fceebbf1fc4604e06066c5e8a0 /src/libcore | |
| parent | 5e92bf280b59fe0c187359743d7d430575fa30b1 (diff) | |
| parent | 683a3db01fcd00998a36e494ee39209b3105cfb9 (diff) | |
Auto merge of #52949 - Mark-Simulacrum:snap, r=alexcrichton
Switch to bootstrapping from 1.29 beta r? @alexcrichton
Diffstat (limited to 'src/libcore')
| -rw-r--r-- | src/libcore/alloc.rs | 6 | ||||
| -rw-r--r-- | src/libcore/intrinsics.rs | 2 | ||||
| -rw-r--r-- | src/libcore/manually_drop_stage0.rs | 195 | ||||
| -rw-r--r-- | src/libcore/mem.rs | 7 | ||||
| -rw-r--r-- | src/libcore/sync/atomic.rs | 32 |
5 files changed, 17 insertions, 225 deletions
diff --git a/src/libcore/alloc.rs b/src/libcore/alloc.rs index b6ac248b79f..39ec5d6411c 100644 --- a/src/libcore/alloc.rs +++ b/src/libcore/alloc.rs @@ -19,10 +19,6 @@ use usize; use ptr::{self, NonNull}; use num::NonZeroUsize; -#[unstable(feature = "alloc_internals", issue = "0")] -#[cfg(stage0)] -pub type Opaque = u8; - /// Represents the combination of a starting address and /// a total capacity of the returned block. #[unstable(feature = "allocator_api", issue = "32838")] @@ -48,7 +44,7 @@ fn size_align<T>() -> (usize, usize) { /// use specific allocators with looser requirements.) #[stable(feature = "alloc_layout", since = "1.28.0")] #[derive(Copy, Clone, Debug, PartialEq, Eq)] -#[cfg_attr(not(stage0), lang = "alloc_layout")] +#[lang = "alloc_layout"] pub struct Layout { // size of the requested block of memory, measured in bytes. size_: usize, diff --git a/src/libcore/intrinsics.rs b/src/libcore/intrinsics.rs index 854cb5f4e3b..9ddf902349d 100644 --- a/src/libcore/intrinsics.rs +++ b/src/libcore/intrinsics.rs @@ -1087,11 +1087,9 @@ extern "rust-intrinsic" { /// Perform a volatile load from the `src` pointer /// The pointer is not required to be aligned. - #[cfg(not(stage0))] pub fn unaligned_volatile_load<T>(src: *const T) -> T; /// Perform a volatile store to the `dst` pointer. /// The pointer is not required to be aligned. - #[cfg(not(stage0))] pub fn unaligned_volatile_store<T>(dst: *mut T, val: T); /// Returns the square root of an `f32` diff --git a/src/libcore/manually_drop_stage0.rs b/src/libcore/manually_drop_stage0.rs deleted file mode 100644 index 8643219cb61..00000000000 --- a/src/libcore/manually_drop_stage0.rs +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright 2018 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or -// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license -// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -/// A wrapper to inhibit compiler from automatically calling `T`’s destructor. -/// -/// This wrapper is 0-cost. -/// -/// # Examples -/// -/// This wrapper helps with explicitly documenting the drop order dependencies between fields of -/// the type: -/// -/// ```rust -/// use std::mem::ManuallyDrop; -/// struct Peach; -/// struct Banana; -/// struct Melon; -/// struct FruitBox { -/// // Immediately clear there’s something non-trivial going on with these fields. -/// peach: ManuallyDrop<Peach>, -/// melon: Melon, // Field that’s independent of the other two. -/// banana: ManuallyDrop<Banana>, -/// } -/// -/// impl Drop for FruitBox { -/// fn drop(&mut self) { -/// unsafe { -/// // Explicit ordering in which field destructors are run specified in the intuitive -/// // location – the destructor of the structure containing the fields. -/// // Moreover, one can now reorder fields within the struct however much they want. -/// ManuallyDrop::drop(&mut self.peach); -/// ManuallyDrop::drop(&mut self.banana); -/// } -/// // After destructor for `FruitBox` runs (this function), the destructor for Melon gets -/// // invoked in the usual manner, as it is not wrapped in `ManuallyDrop`. -/// } -/// } -/// ``` -#[stable(feature = "manually_drop", since = "1.20.0")] -#[allow(unions_with_drop_fields)] -#[derive(Copy)] -pub union ManuallyDrop<T>{ value: T } - -impl<T> ManuallyDrop<T> { - /// Wrap a value to be manually dropped. - /// - /// # Examples - /// - /// ```rust - /// use std::mem::ManuallyDrop; - /// ManuallyDrop::new(Box::new(())); - /// ``` - #[stable(feature = "manually_drop", since = "1.20.0")] - #[rustc_const_unstable(feature = "const_manually_drop_new")] - #[inline] - pub const fn new(value: T) -> ManuallyDrop<T> { - ManuallyDrop { value: value } - } - - /// Extract the value from the ManuallyDrop container. - /// - /// # Examples - /// - /// ```rust - /// use std::mem::ManuallyDrop; - /// let x = ManuallyDrop::new(Box::new(())); - /// let _: Box<()> = ManuallyDrop::into_inner(x); - /// ``` - #[stable(feature = "manually_drop", since = "1.20.0")] - #[inline] - pub fn into_inner(slot: ManuallyDrop<T>) -> T { - unsafe { - slot.value - } - } - - /// Manually drops the contained value. - /// - /// # Safety - /// - /// This function runs the destructor of the contained value and thus the wrapped value - /// now represents uninitialized data. It is up to the user of this method to ensure the - /// uninitialized data is not actually used. - #[stable(feature = "manually_drop", since = "1.20.0")] - #[inline] - pub unsafe fn drop(slot: &mut ManuallyDrop<T>) { - ptr::drop_in_place(&mut slot.value) - } -} - -#[stable(feature = "manually_drop", since = "1.20.0")] -impl<T> Deref for ManuallyDrop<T> { - type Target = T; - #[inline] - fn deref(&self) -> &Self::Target { - unsafe { - &self.value - } - } -} - -#[stable(feature = "manually_drop", since = "1.20.0")] -impl<T> DerefMut for ManuallyDrop<T> { - #[inline] - fn deref_mut(&mut self) -> &mut Self::Target { - unsafe { - &mut self.value - } - } -} - -#[stable(feature = "manually_drop", since = "1.20.0")] -impl<T: ::fmt::Debug> ::fmt::Debug for ManuallyDrop<T> { - fn fmt(&self, fmt: &mut ::fmt::Formatter) -> ::fmt::Result { - unsafe { - fmt.debug_tuple("ManuallyDrop").field(&self.value).finish() - } - } -} - -#[stable(feature = "manually_drop_impls", since = "1.22.0")] -impl<T: Clone> Clone for ManuallyDrop<T> { - fn clone(&self) -> Self { - ManuallyDrop::new(self.deref().clone()) - } - - fn clone_from(&mut self, source: &Self) { - self.deref_mut().clone_from(source); - } -} - -#[stable(feature = "manually_drop_impls", since = "1.22.0")] -impl<T: Default> Default for ManuallyDrop<T> { - fn default() -> Self { - ManuallyDrop::new(Default::default()) - } -} - -#[stable(feature = "manually_drop_impls", since = "1.22.0")] -impl<T: PartialEq> PartialEq for ManuallyDrop<T> { - fn eq(&self, other: &Self) -> bool { - self.deref().eq(other) - } - - fn ne(&self, other: &Self) -> bool { - self.deref().ne(other) - } -} - -#[stable(feature = "manually_drop_impls", since = "1.22.0")] -impl<T: Eq> Eq for ManuallyDrop<T> {} - -#[stable(feature = "manually_drop_impls", since = "1.22.0")] -impl<T: PartialOrd> PartialOrd for ManuallyDrop<T> { - fn partial_cmp(&self, other: &Self) -> Option<::cmp::Ordering> { - self.deref().partial_cmp(other) - } - - fn lt(&self, other: &Self) -> bool { - self.deref().lt(other) - } - - fn le(&self, other: &Self) -> bool { - self.deref().le(other) - } - - fn gt(&self, other: &Self) -> bool { - self.deref().gt(other) - } - - fn ge(&self, other: &Self) -> bool { - self.deref().ge(other) - } -} - -#[stable(feature = "manually_drop_impls", since = "1.22.0")] -impl<T: Ord> Ord for ManuallyDrop<T> { - fn cmp(&self, other: &Self) -> ::cmp::Ordering { - self.deref().cmp(other) - } -} - -#[stable(feature = "manually_drop_impls", since = "1.22.0")] -impl<T: ::hash::Hash> ::hash::Hash for ManuallyDrop<T> { - fn hash<H: ::hash::Hasher>(&self, state: &mut H) { - self.deref().hash(state); - } -} diff --git a/src/libcore/mem.rs b/src/libcore/mem.rs index 1a54f03bb00..8a74e7c6f1c 100644 --- a/src/libcore/mem.rs +++ b/src/libcore/mem.rs @@ -953,7 +953,6 @@ pub fn discriminant<T>(v: &T) -> Discriminant<T> { /// } /// } /// ``` -#[cfg(not(stage0))] #[stable(feature = "manually_drop", since = "1.20.0")] #[lang = "manually_drop"] #[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] @@ -961,10 +960,6 @@ pub struct ManuallyDrop<T> { value: T, } -#[cfg(stage0)] -include!("manually_drop_stage0.rs"); - -#[cfg(not(stage0))] impl<T> ManuallyDrop<T> { /// Wrap a value to be manually dropped. /// @@ -1010,7 +1005,6 @@ impl<T> ManuallyDrop<T> { } } -#[cfg(not(stage0))] #[stable(feature = "manually_drop", since = "1.20.0")] impl<T> Deref for ManuallyDrop<T> { type Target = T; @@ -1020,7 +1014,6 @@ impl<T> Deref for ManuallyDrop<T> { } } -#[cfg(not(stage0))] #[stable(feature = "manually_drop", since = "1.20.0")] impl<T> DerefMut for ManuallyDrop<T> { #[inline] diff --git a/src/libcore/sync/atomic.rs b/src/libcore/sync/atomic.rs index 1e2b18bf9b0..e98194c17c8 100644 --- a/src/libcore/sync/atomic.rs +++ b/src/libcore/sync/atomic.rs @@ -373,7 +373,7 @@ impl AtomicBool { /// ``` #[inline] #[stable(feature = "rust1", since = "1.0.0")] - #[cfg(any(stage0, target_has_atomic = "cas"))] + #[cfg(target_has_atomic = "cas")] pub fn swap(&self, val: bool, order: Ordering) -> bool { unsafe { atomic_swap(self.v.get(), val as u8, order) != 0 } } @@ -404,7 +404,7 @@ impl AtomicBool { /// ``` #[inline] #[stable(feature = "rust1", since = "1.0.0")] - #[cfg(any(stage0, target_has_atomic = "cas"))] + #[cfg(target_has_atomic = "cas")] pub fn compare_and_swap(&self, current: bool, new: bool, order: Ordering) -> bool { match self.compare_exchange(current, new, order, strongest_failure_ordering(order)) { Ok(x) => x, @@ -450,7 +450,7 @@ impl AtomicBool { /// ``` #[inline] #[stable(feature = "extended_compare_and_swap", since = "1.10.0")] - #[cfg(any(stage0, target_has_atomic = "cas"))] + #[cfg(target_has_atomic = "cas")] pub fn compare_exchange(&self, current: bool, new: bool, @@ -542,7 +542,7 @@ impl AtomicBool { /// ``` #[inline] #[stable(feature = "rust1", since = "1.0.0")] - #[cfg(any(stage0, target_has_atomic = "cas"))] + #[cfg(target_has_atomic = "cas")] pub fn fetch_and(&self, val: bool, order: Ordering) -> bool { unsafe { atomic_and(self.v.get(), val as u8, order) != 0 } } @@ -574,7 +574,7 @@ impl AtomicBool { /// ``` #[inline] #[stable(feature = "rust1", since = "1.0.0")] - #[cfg(any(stage0, target_has_atomic = "cas"))] + #[cfg(target_has_atomic = "cas")] pub fn fetch_nand(&self, val: bool, order: Ordering) -> bool { // We can't use atomic_nand here because it can result in a bool with // an invalid value. This happens because the atomic operation is done @@ -617,7 +617,7 @@ impl AtomicBool { /// ``` #[inline] #[stable(feature = "rust1", since = "1.0.0")] - #[cfg(any(stage0, target_has_atomic = "cas"))] + #[cfg(target_has_atomic = "cas")] pub fn fetch_or(&self, val: bool, order: Ordering) -> bool { unsafe { atomic_or(self.v.get(), val as u8, order) != 0 } } @@ -648,7 +648,7 @@ impl AtomicBool { /// ``` #[inline] #[stable(feature = "rust1", since = "1.0.0")] - #[cfg(any(stage0, target_has_atomic = "cas"))] + #[cfg(target_has_atomic = "cas")] pub fn fetch_xor(&self, val: bool, order: Ordering) -> bool { unsafe { atomic_xor(self.v.get(), val as u8, order) != 0 } } @@ -795,7 +795,7 @@ impl<T> AtomicPtr<T> { /// ``` #[inline] #[stable(feature = "rust1", since = "1.0.0")] - #[cfg(any(stage0, target_has_atomic = "cas"))] + #[cfg(target_has_atomic = "cas")] pub fn swap(&self, ptr: *mut T, order: Ordering) -> *mut T { unsafe { atomic_swap(self.p.get() as *mut usize, ptr as usize, order) as *mut T } } @@ -825,7 +825,7 @@ impl<T> AtomicPtr<T> { /// ``` #[inline] #[stable(feature = "rust1", since = "1.0.0")] - #[cfg(any(stage0, target_has_atomic = "cas"))] + #[cfg(target_has_atomic = "cas")] pub fn compare_and_swap(&self, current: *mut T, new: *mut T, order: Ordering) -> *mut T { match self.compare_exchange(current, new, order, strongest_failure_ordering(order)) { Ok(x) => x, @@ -864,7 +864,7 @@ impl<T> AtomicPtr<T> { /// ``` #[inline] #[stable(feature = "extended_compare_and_swap", since = "1.10.0")] - #[cfg(any(stage0, target_has_atomic = "cas"))] + #[cfg(target_has_atomic = "cas")] pub fn compare_exchange(&self, current: *mut T, new: *mut T, @@ -1151,7 +1151,7 @@ assert_eq!(some_var.swap(10, Ordering::Relaxed), 5); ```"), #[inline] #[$stable] - #[cfg(any(stage0, target_has_atomic = "cas"))] + #[cfg(target_has_atomic = "cas")] pub fn swap(&self, val: $int_type, order: Ordering) -> $int_type { unsafe { atomic_swap(self.v.get(), val, order) } } @@ -1184,7 +1184,7 @@ assert_eq!(some_var.load(Ordering::Relaxed), 10); ```"), #[inline] #[$stable] - #[cfg(any(stage0, target_has_atomic = "cas"))] + #[cfg(target_has_atomic = "cas")] pub fn compare_and_swap(&self, current: $int_type, new: $int_type, @@ -1238,7 +1238,7 @@ assert_eq!(some_var.load(Ordering::Relaxed), 10); ```"), #[inline] #[$stable_cxchg] - #[cfg(any(stage0, target_has_atomic = "cas"))] + #[cfg(target_has_atomic = "cas")] pub fn compare_exchange(&self, current: $int_type, new: $int_type, @@ -1693,7 +1693,7 @@ atomic_int!{ } #[inline] -#[cfg(any(stage0, target_has_atomic = "cas"))] +#[cfg(target_has_atomic = "cas")] fn strongest_failure_ordering(order: Ordering) -> Ordering { match order { Release => Relaxed, @@ -1730,7 +1730,7 @@ unsafe fn atomic_load<T>(dst: *const T, order: Ordering) -> T { } #[inline] -#[cfg(any(stage0, target_has_atomic = "cas"))] +#[cfg(target_has_atomic = "cas")] unsafe fn atomic_swap<T>(dst: *mut T, val: T, order: Ordering) -> T { match order { Acquire => intrinsics::atomic_xchg_acq(dst, val), @@ -1769,7 +1769,7 @@ unsafe fn atomic_sub<T>(dst: *mut T, val: T, order: Ordering) -> T { } #[inline] -#[cfg(any(stage0, target_has_atomic = "cas"))] +#[cfg(target_has_atomic = "cas")] unsafe fn atomic_compare_exchange<T>(dst: *mut T, old: T, new: T, |
