Auto merge of #47214 - kennytm:rollup, r=kennytm
Rollup of 10 pull requests - Successful merges: #47030, #47033, #47110, #47149, #47150, #47160, #47162, #47182, #47198, #47199 - Failed merges:
This commit is contained in:
commit
dd582ac38e
|
@ -38,7 +38,6 @@ Stabilized APIs
|
|||
|
||||
Cargo
|
||||
-----
|
||||
- [Cargo now supports alternative registries][cargo/4506]
|
||||
- [Cargo now supports uninstallation of multiple packages][cargo/4561]
|
||||
eg. `cargo uninstall foo bar` uninstalls `foo` and `bar`.
|
||||
- [Added unit test checking to `cargo check`][cargo/4592]
|
||||
|
@ -49,7 +48,6 @@ Misc
|
|||
----
|
||||
- [Releases now ship with the Cargo book documentation.][45692]
|
||||
- [rustdoc now prints rendering warnings on every run.][45324]
|
||||
- [Release tarballs now come with rustfmt][45903]
|
||||
|
||||
Compatibility Notes
|
||||
-------------------
|
||||
|
@ -83,9 +81,7 @@ Compatibility Notes
|
|||
[45852]: https://github.com/rust-lang/rust/issues/45852
|
||||
[45853]: https://github.com/rust-lang/rust/pull/45853
|
||||
[45887]: https://github.com/rust-lang/rust/pull/45887
|
||||
[45903]: https://github.com/rust-lang/rust/pull/45903
|
||||
[45920]: https://github.com/rust-lang/rust/pull/45920
|
||||
[cargo/4506]: https://github.com/rust-lang/cargo/pull/4506
|
||||
[cargo/4561]: https://github.com/rust-lang/cargo/pull/4561
|
||||
[cargo/4592]: https://github.com/rust-lang/cargo/pull/4592
|
||||
[cargo/4637]: https://github.com/rust-lang/cargo/pull/4637
|
||||
|
|
|
@ -21,9 +21,10 @@
|
|||
use std::collections::HashMap;
|
||||
use std::env;
|
||||
use std::ffi::{OsString, OsStr};
|
||||
use std::fs;
|
||||
use std::process::Command;
|
||||
use std::fs::{self, File};
|
||||
use std::io::Read;
|
||||
use std::path::PathBuf;
|
||||
use std::process::Command;
|
||||
|
||||
use build_helper::output;
|
||||
|
||||
|
@ -234,4 +235,14 @@ $ pacman -R cmake && pacman -S mingw-w64-x86_64-cmake
|
|||
if let Some(ref s) = build.config.ccache {
|
||||
cmd_finder.must_have(s);
|
||||
}
|
||||
|
||||
if build.config.channel == "stable" {
|
||||
let mut stage0 = String::new();
|
||||
t!(t!(File::open(build.src.join("src/stage0.txt")))
|
||||
.read_to_string(&mut stage0));
|
||||
if stage0.contains("\ndev:") {
|
||||
panic!("bootstrapping from a dev compiler in a stable release, but \
|
||||
should only be bootstrapping from a released compiler!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -228,43 +228,7 @@ impl<T: Ord> BTreeSet<T> {
|
|||
pub fn new() -> BTreeSet<T> {
|
||||
BTreeSet { map: BTreeMap::new() }
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> BTreeSet<T> {
|
||||
/// Gets an iterator that visits the values in the `BTreeSet` in ascending order.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use std::collections::BTreeSet;
|
||||
///
|
||||
/// let set: BTreeSet<usize> = [1, 2, 3].iter().cloned().collect();
|
||||
/// let mut set_iter = set.iter();
|
||||
/// assert_eq!(set_iter.next(), Some(&1));
|
||||
/// assert_eq!(set_iter.next(), Some(&2));
|
||||
/// assert_eq!(set_iter.next(), Some(&3));
|
||||
/// assert_eq!(set_iter.next(), None);
|
||||
/// ```
|
||||
///
|
||||
/// Values returned by the iterator are returned in ascending order:
|
||||
///
|
||||
/// ```
|
||||
/// use std::collections::BTreeSet;
|
||||
///
|
||||
/// let set: BTreeSet<usize> = [3, 1, 2].iter().cloned().collect();
|
||||
/// let mut set_iter = set.iter();
|
||||
/// assert_eq!(set_iter.next(), Some(&1));
|
||||
/// assert_eq!(set_iter.next(), Some(&2));
|
||||
/// assert_eq!(set_iter.next(), Some(&3));
|
||||
/// assert_eq!(set_iter.next(), None);
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn iter(&self) -> Iter<T> {
|
||||
Iter { iter: self.map.keys() }
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Ord> BTreeSet<T> {
|
||||
/// Constructs a double-ended iterator over a sub-range of elements in the set.
|
||||
/// The simplest way is to use the range syntax `min..max`, thus `range(min..max)` will
|
||||
/// yield elements from min (inclusive) to max (exclusive).
|
||||
|
@ -293,9 +257,7 @@ impl<T: Ord> BTreeSet<T> {
|
|||
{
|
||||
Range { iter: self.map.range(range) }
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Ord> BTreeSet<T> {
|
||||
/// Visits the values representing the difference,
|
||||
/// i.e. the values that are in `self` but not in `other`,
|
||||
/// in ascending order.
|
||||
|
@ -408,40 +370,6 @@ impl<T: Ord> BTreeSet<T> {
|
|||
}
|
||||
}
|
||||
|
||||
/// Returns the number of elements in the set.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use std::collections::BTreeSet;
|
||||
///
|
||||
/// let mut v = BTreeSet::new();
|
||||
/// assert_eq!(v.len(), 0);
|
||||
/// v.insert(1);
|
||||
/// assert_eq!(v.len(), 1);
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn len(&self) -> usize {
|
||||
self.map.len()
|
||||
}
|
||||
|
||||
/// Returns `true` if the set contains no elements.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use std::collections::BTreeSet;
|
||||
///
|
||||
/// let mut v = BTreeSet::new();
|
||||
/// assert!(v.is_empty());
|
||||
/// v.insert(1);
|
||||
/// assert!(!v.is_empty());
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn is_empty(&self) -> bool {
|
||||
self.len() == 0
|
||||
}
|
||||
|
||||
/// Clears the set, removing all values.
|
||||
///
|
||||
/// # Examples
|
||||
|
@ -724,6 +652,74 @@ impl<T: Ord> BTreeSet<T> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<T> BTreeSet<T> {
|
||||
/// Gets an iterator that visits the values in the `BTreeSet` in ascending order.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use std::collections::BTreeSet;
|
||||
///
|
||||
/// let set: BTreeSet<usize> = [1, 2, 3].iter().cloned().collect();
|
||||
/// let mut set_iter = set.iter();
|
||||
/// assert_eq!(set_iter.next(), Some(&1));
|
||||
/// assert_eq!(set_iter.next(), Some(&2));
|
||||
/// assert_eq!(set_iter.next(), Some(&3));
|
||||
/// assert_eq!(set_iter.next(), None);
|
||||
/// ```
|
||||
///
|
||||
/// Values returned by the iterator are returned in ascending order:
|
||||
///
|
||||
/// ```
|
||||
/// use std::collections::BTreeSet;
|
||||
///
|
||||
/// let set: BTreeSet<usize> = [3, 1, 2].iter().cloned().collect();
|
||||
/// let mut set_iter = set.iter();
|
||||
/// assert_eq!(set_iter.next(), Some(&1));
|
||||
/// assert_eq!(set_iter.next(), Some(&2));
|
||||
/// assert_eq!(set_iter.next(), Some(&3));
|
||||
/// assert_eq!(set_iter.next(), None);
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn iter(&self) -> Iter<T> {
|
||||
Iter { iter: self.map.keys() }
|
||||
}
|
||||
|
||||
/// Returns the number of elements in the set.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use std::collections::BTreeSet;
|
||||
///
|
||||
/// let mut v = BTreeSet::new();
|
||||
/// assert_eq!(v.len(), 0);
|
||||
/// v.insert(1);
|
||||
/// assert_eq!(v.len(), 1);
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn len(&self) -> usize {
|
||||
self.map.len()
|
||||
}
|
||||
|
||||
/// Returns `true` if the set contains no elements.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use std::collections::BTreeSet;
|
||||
///
|
||||
/// let mut v = BTreeSet::new();
|
||||
/// assert!(v.is_empty());
|
||||
/// v.insert(1);
|
||||
/// assert!(!v.is_empty());
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn is_empty(&self) -> bool {
|
||||
self.len() == 0
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T: Ord> FromIterator<T> for BTreeSet<T> {
|
||||
fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> BTreeSet<T> {
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#![feature(core_intrinsics)]
|
||||
#![feature(staged_api)]
|
||||
#![feature(rustc_attrs)]
|
||||
#![cfg_attr(any(unix, target_os = "redox"), feature(libc))]
|
||||
#![cfg_attr(any(unix, target_os = "cloudabi", target_os = "redox"), feature(libc))]
|
||||
#![rustc_alloc_kind = "lib"]
|
||||
|
||||
// The minimum alignment guaranteed by the architecture. This value is used to
|
||||
|
@ -116,7 +116,7 @@ unsafe impl Alloc for System {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(any(unix, target_os = "redox"))]
|
||||
#[cfg(any(unix, target_os = "cloudabi", target_os = "redox"))]
|
||||
mod platform {
|
||||
extern crate libc;
|
||||
|
||||
|
@ -213,6 +213,16 @@ mod platform {
|
|||
struct Stderr;
|
||||
|
||||
impl Write for Stderr {
|
||||
#[cfg(target_os = "cloudabi")]
|
||||
fn write_str(&mut self, _: &str) -> fmt::Result {
|
||||
// CloudABI does not have any reserved file descriptor
|
||||
// numbers. We should not attempt to write to file
|
||||
// descriptor #2, as it may be associated with any kind of
|
||||
// resource.
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(not(target_os = "cloudabi"))]
|
||||
fn write_str(&mut self, s: &str) -> fmt::Result {
|
||||
unsafe {
|
||||
libc::write(libc::STDERR_FILENO,
|
||||
|
|
|
@ -330,6 +330,7 @@ macro_rules! debug_assert_ne {
|
|||
/// // The prefered method of quick returning Errors
|
||||
/// fn write_to_file_question() -> Result<(), MyError> {
|
||||
/// let mut file = File::create("my_best_friends.txt")?;
|
||||
/// file.write_all(b"This is a list of my best friends.")?;
|
||||
/// Ok(())
|
||||
/// }
|
||||
///
|
||||
|
|
|
@ -1024,7 +1024,7 @@ impl<T: ::fmt::Debug> ::fmt::Debug for ManuallyDrop<T> {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "manually_drop", since = "1.20.0")]
|
||||
#[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())
|
||||
|
@ -1035,14 +1035,14 @@ impl<T: Clone> Clone for ManuallyDrop<T> {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "manually_drop", since = "1.20.0")]
|
||||
#[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", since = "1.20.0")]
|
||||
#[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)
|
||||
|
@ -1053,10 +1053,10 @@ impl<T: PartialEq> PartialEq for ManuallyDrop<T> {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "manually_drop", since = "1.20.0")]
|
||||
#[stable(feature = "manually_drop_impls", since = "1.22.0")]
|
||||
impl<T: Eq> Eq for ManuallyDrop<T> {}
|
||||
|
||||
#[stable(feature = "manually_drop", since = "1.20.0")]
|
||||
#[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)
|
||||
|
@ -1079,14 +1079,14 @@ impl<T: PartialOrd> PartialOrd for ManuallyDrop<T> {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "manually_drop", since = "1.20.0")]
|
||||
#[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", since = "1.20.0")]
|
||||
#[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);
|
||||
|
|
|
@ -1997,7 +1997,9 @@ mod traits {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "str_checked_slicing", since = "1.20.0")]
|
||||
#[unstable(feature = "inclusive_range",
|
||||
reason = "recently added, follows RFC",
|
||||
issue = "28237")]
|
||||
impl SliceIndex<str> for ops::RangeInclusive<usize> {
|
||||
type Output = str;
|
||||
#[inline]
|
||||
|
@ -2040,7 +2042,9 @@ mod traits {
|
|||
|
||||
|
||||
|
||||
#[stable(feature = "str_checked_slicing", since = "1.20.0")]
|
||||
#[unstable(feature = "inclusive_range",
|
||||
reason = "recently added, follows RFC",
|
||||
issue = "28237")]
|
||||
impl SliceIndex<str> for ops::RangeToInclusive<usize> {
|
||||
type Output = str;
|
||||
#[inline]
|
||||
|
|
|
@ -944,6 +944,7 @@ macro_rules! atomic_int {
|
|||
$stable_cxchg:meta,
|
||||
$stable_debug:meta,
|
||||
$stable_access:meta,
|
||||
$stable_from:meta,
|
||||
$s_int_type:expr, $int_ref:expr,
|
||||
$int_type:ident $atomic_type:ident $atomic_init:ident) => {
|
||||
/// An integer type which can be safely shared between threads.
|
||||
|
@ -978,7 +979,7 @@ macro_rules! atomic_int {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "atomic_from", since = "1.23.0")]
|
||||
#[$stable_from]
|
||||
impl From<$int_type> for $atomic_type {
|
||||
#[inline]
|
||||
fn from(v: $int_type) -> Self { Self::new(v) }
|
||||
|
@ -1375,6 +1376,7 @@ atomic_int! {
|
|||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
"i8", "../../../std/primitive.i8.html",
|
||||
i8 AtomicI8 ATOMIC_I8_INIT
|
||||
}
|
||||
|
@ -1384,6 +1386,7 @@ atomic_int! {
|
|||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
"u8", "../../../std/primitive.u8.html",
|
||||
u8 AtomicU8 ATOMIC_U8_INIT
|
||||
}
|
||||
|
@ -1393,6 +1396,7 @@ atomic_int! {
|
|||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
"i16", "../../../std/primitive.i16.html",
|
||||
i16 AtomicI16 ATOMIC_I16_INIT
|
||||
}
|
||||
|
@ -1402,6 +1406,7 @@ atomic_int! {
|
|||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
"u16", "../../../std/primitive.u16.html",
|
||||
u16 AtomicU16 ATOMIC_U16_INIT
|
||||
}
|
||||
|
@ -1411,6 +1416,7 @@ atomic_int! {
|
|||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
"i32", "../../../std/primitive.i32.html",
|
||||
i32 AtomicI32 ATOMIC_I32_INIT
|
||||
}
|
||||
|
@ -1420,6 +1426,7 @@ atomic_int! {
|
|||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
"u32", "../../../std/primitive.u32.html",
|
||||
u32 AtomicU32 ATOMIC_U32_INIT
|
||||
}
|
||||
|
@ -1429,6 +1436,7 @@ atomic_int! {
|
|||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
"i64", "../../../std/primitive.i64.html",
|
||||
i64 AtomicI64 ATOMIC_I64_INIT
|
||||
}
|
||||
|
@ -1438,6 +1446,7 @@ atomic_int! {
|
|||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
unstable(feature = "integer_atomics", issue = "32976"),
|
||||
"u64", "../../../std/primitive.u64.html",
|
||||
u64 AtomicU64 ATOMIC_U64_INIT
|
||||
}
|
||||
|
@ -1447,6 +1456,7 @@ atomic_int!{
|
|||
stable(feature = "extended_compare_and_swap", since = "1.10.0"),
|
||||
stable(feature = "atomic_debug", since = "1.3.0"),
|
||||
stable(feature = "atomic_access", since = "1.15.0"),
|
||||
stable(feature = "atomic_from", since = "1.23.0"),
|
||||
"isize", "../../../std/primitive.isize.html",
|
||||
isize AtomicIsize ATOMIC_ISIZE_INIT
|
||||
}
|
||||
|
@ -1456,6 +1466,7 @@ atomic_int!{
|
|||
stable(feature = "extended_compare_and_swap", since = "1.10.0"),
|
||||
stable(feature = "atomic_debug", since = "1.3.0"),
|
||||
stable(feature = "atomic_access", since = "1.15.0"),
|
||||
stable(feature = "atomic_from", since = "1.23.0"),
|
||||
"usize", "../../../std/primitive.usize.html",
|
||||
usize AtomicUsize ATOMIC_USIZE_INIT
|
||||
}
|
||||
|
|
|
@ -247,13 +247,27 @@ impl Span {
|
|||
#[unstable(feature = "proc_macro", issue = "38356")]
|
||||
pub fn join(&self, other: Span) -> Option<Span> {
|
||||
let self_loc = __internal::lookup_char_pos(self.0.lo());
|
||||
let other_loc = __internal::lookup_char_pos(self.0.lo());
|
||||
let other_loc = __internal::lookup_char_pos(other.0.lo());
|
||||
|
||||
if self_loc.file.name != other_loc.file.name { return None }
|
||||
|
||||
Some(Span(self.0.to(other.0)))
|
||||
}
|
||||
|
||||
/// Creates a new span with the same line/column information as `self` but
|
||||
/// that resolves symbols as though it were at `other`.
|
||||
#[unstable(feature = "proc_macro", issue = "38356")]
|
||||
pub fn resolved_at(&self, other: Span) -> Span {
|
||||
Span(self.0.with_ctxt(other.0.ctxt()))
|
||||
}
|
||||
|
||||
/// Creates a new span with the same name resolution behavior as `self` but
|
||||
/// with the line/column information of `other`.
|
||||
#[unstable(feature = "proc_macro", issue = "38356")]
|
||||
pub fn located_at(&self, other: Span) -> Span {
|
||||
other.resolved_at(*self)
|
||||
}
|
||||
|
||||
diagnostic_method!(error, Level::Error);
|
||||
diagnostic_method!(warning, Level::Warning);
|
||||
diagnostic_method!(note, Level::Note);
|
||||
|
|
|
@ -27,6 +27,18 @@ pub fn opts() -> TargetOptions {
|
|||
linker_is_gnu: true,
|
||||
pre_link_args: args,
|
||||
position_independent_executables: true,
|
||||
// As CloudABI only supports static linkage, there is no need
|
||||
// for dynamic TLS. The C library therefore does not provide
|
||||
// __tls_get_addr(), which is normally used to perform dynamic
|
||||
// TLS lookups by programs that make use of dlopen(). Only the
|
||||
// "local-exec" and "initial-exec" TLS models can be used.
|
||||
//
|
||||
// "local-exec" is more efficient than "initial-exec", as the
|
||||
// latter has one more level of indirection: it accesses the GOT
|
||||
// (Global Offset Table) to obtain the effective address of a
|
||||
// thread-local variable. Using a GOT is useful only when doing
|
||||
// dynamic linking.
|
||||
tls_model: "local-exec".to_string(),
|
||||
relro_level: RelroLevel::Full,
|
||||
exe_allocation_crate: super::maybe_jemalloc(),
|
||||
.. Default::default()
|
||||
|
|
|
@ -706,7 +706,7 @@ impl From<CString> for Box<CStr> {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "shared_from_slice2", since = "1.23.0")]
|
||||
#[stable(feature = "shared_from_slice2", since = "1.24.0")]
|
||||
impl From<CString> for Arc<CStr> {
|
||||
#[inline]
|
||||
fn from(s: CString) -> Arc<CStr> {
|
||||
|
@ -715,7 +715,7 @@ impl From<CString> for Arc<CStr> {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "shared_from_slice2", since = "1.23.0")]
|
||||
#[stable(feature = "shared_from_slice2", since = "1.24.0")]
|
||||
impl<'a> From<&'a CStr> for Arc<CStr> {
|
||||
#[inline]
|
||||
fn from(s: &CStr) -> Arc<CStr> {
|
||||
|
@ -724,7 +724,7 @@ impl<'a> From<&'a CStr> for Arc<CStr> {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "shared_from_slice2", since = "1.23.0")]
|
||||
#[stable(feature = "shared_from_slice2", since = "1.24.0")]
|
||||
impl From<CString> for Rc<CStr> {
|
||||
#[inline]
|
||||
fn from(s: CString) -> Rc<CStr> {
|
||||
|
@ -733,7 +733,7 @@ impl From<CString> for Rc<CStr> {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "shared_from_slice2", since = "1.23.0")]
|
||||
#[stable(feature = "shared_from_slice2", since = "1.24.0")]
|
||||
impl<'a> From<&'a CStr> for Rc<CStr> {
|
||||
#[inline]
|
||||
fn from(s: &CStr) -> Rc<CStr> {
|
||||
|
|
|
@ -594,7 +594,7 @@ impl From<OsString> for Box<OsStr> {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "shared_from_slice2", since = "1.23.0")]
|
||||
#[stable(feature = "shared_from_slice2", since = "1.24.0")]
|
||||
impl From<OsString> for Arc<OsStr> {
|
||||
#[inline]
|
||||
fn from(s: OsString) -> Arc<OsStr> {
|
||||
|
@ -603,7 +603,7 @@ impl From<OsString> for Arc<OsStr> {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "shared_from_slice2", since = "1.23.0")]
|
||||
#[stable(feature = "shared_from_slice2", since = "1.24.0")]
|
||||
impl<'a> From<&'a OsStr> for Arc<OsStr> {
|
||||
#[inline]
|
||||
fn from(s: &OsStr) -> Arc<OsStr> {
|
||||
|
@ -612,7 +612,7 @@ impl<'a> From<&'a OsStr> for Arc<OsStr> {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "shared_from_slice2", since = "1.23.0")]
|
||||
#[stable(feature = "shared_from_slice2", since = "1.24.0")]
|
||||
impl From<OsString> for Rc<OsStr> {
|
||||
#[inline]
|
||||
fn from(s: OsString) -> Rc<OsStr> {
|
||||
|
@ -621,7 +621,7 @@ impl From<OsString> for Rc<OsStr> {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "shared_from_slice2", since = "1.23.0")]
|
||||
#[stable(feature = "shared_from_slice2", since = "1.24.0")]
|
||||
impl<'a> From<&'a OsStr> for Rc<OsStr> {
|
||||
#[inline]
|
||||
fn from(s: &OsStr) -> Rc<OsStr> {
|
||||
|
|
|
@ -1454,7 +1454,7 @@ impl<'a> From<PathBuf> for Cow<'a, Path> {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "shared_from_slice2", since = "1.23.0")]
|
||||
#[stable(feature = "shared_from_slice2", since = "1.24.0")]
|
||||
impl From<PathBuf> for Arc<Path> {
|
||||
#[inline]
|
||||
fn from(s: PathBuf) -> Arc<Path> {
|
||||
|
@ -1463,7 +1463,7 @@ impl From<PathBuf> for Arc<Path> {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "shared_from_slice2", since = "1.23.0")]
|
||||
#[stable(feature = "shared_from_slice2", since = "1.24.0")]
|
||||
impl<'a> From<&'a Path> for Arc<Path> {
|
||||
#[inline]
|
||||
fn from(s: &Path) -> Arc<Path> {
|
||||
|
@ -1472,7 +1472,7 @@ impl<'a> From<&'a Path> for Arc<Path> {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "shared_from_slice2", since = "1.23.0")]
|
||||
#[stable(feature = "shared_from_slice2", since = "1.24.0")]
|
||||
impl From<PathBuf> for Rc<Path> {
|
||||
#[inline]
|
||||
fn from(s: PathBuf) -> Rc<Path> {
|
||||
|
@ -1481,7 +1481,7 @@ impl From<PathBuf> for Rc<Path> {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "shared_from_slice2", since = "1.23.0")]
|
||||
#[stable(feature = "shared_from_slice2", since = "1.24.0")]
|
||||
impl<'a> From<&'a Path> for Rc<Path> {
|
||||
#[inline]
|
||||
fn from(s: &Path) -> Rc<Path> {
|
||||
|
|
|
@ -68,8 +68,8 @@
|
|||
//! assert_eq!(b"Oh no, a typo!\n", output.stdout.as_slice());
|
||||
//! ```
|
||||
//!
|
||||
//! Note that [`ChildStderr`] and [`ChildStdout`] implement [`Write`] and
|
||||
//! [`ChildStdin`] implements [`Read`]:
|
||||
//! Note that [`ChildStderr`] and [`ChildStdout`] implement [`Read`] and
|
||||
//! [`ChildStdin`] implements [`Write`]:
|
||||
//!
|
||||
//! ```no_run
|
||||
//! use std::process::{Command, Stdio};
|
||||
|
|
|
@ -382,7 +382,7 @@ unsafe impl<#[may_dangle] T: ?Sized> Drop for Mutex<T> {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "mutex_from", since = "1.22.0")]
|
||||
#[stable(feature = "mutex_from", since = "1.24.0")]
|
||||
impl<T> From<T> for Mutex<T> {
|
||||
/// Creates a new mutex in an unlocked state ready for use.
|
||||
/// This is equivalent to [`Mutex::new`].
|
||||
|
|
|
@ -457,7 +457,7 @@ impl<T: Default> Default for RwLock<T> {
|
|||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "rw_lock_from", since = "1.22.0")]
|
||||
#[stable(feature = "rw_lock_from", since = "1.24.0")]
|
||||
impl<T> From<T> for RwLock<T> {
|
||||
/// Creates a new instance of an `RwLock<T>` which is unlocked.
|
||||
/// This is equivalent to [`RwLock::new`].
|
||||
|
|
Loading…
Reference in New Issue