diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs index 2748903f2d475..2edcef203ad26 100644 --- a/src/bootstrap/builder.rs +++ b/src/bootstrap/builder.rs @@ -886,7 +886,18 @@ impl<'a> Builder<'a> { // things still build right, please do! match mode { Mode::Std => metadata.push_str("std"), - _ => {}, + // When we're building rustc tools, they're built with a search path + // that contains things built during the rustc build. For example, + // bitflags is built during the rustc build, and is a dependency of + // rustdoc as well. We're building rustdoc in a different target + // directory, though, which means that Cargo will rebuild the + // dependency. When we go on to build rustdoc, we'll look for + // bitflags, and find two different copies: one built during the + // rustc step and one that we just built. This isn't always a + // problem, somehow -- not really clear why -- but we know that this + // fixes things. + Mode::ToolRustc => metadata.push_str("tool-rustc"), + _ => {} } cargo.env("__CARGO_DEFAULT_LIB_METADATA", &metadata); diff --git a/src/bootstrap/channel.rs b/src/bootstrap/channel.rs index ef1b6e217a24f..b17ee098ff62a 100644 --- a/src/bootstrap/channel.rs +++ b/src/bootstrap/channel.rs @@ -13,7 +13,7 @@ use build_helper::output; use crate::Build; // The version number -pub const CFG_RELEASE_NUM: &str = "1.40.0"; +pub const CFG_RELEASE_NUM: &str = "1.41.0"; pub struct GitInfo { inner: Option, diff --git a/src/libcore/array/mod.rs b/src/libcore/array/mod.rs index 74a7d062d3f4a..901c1ee33cda4 100644 --- a/src/libcore/array/mod.rs +++ b/src/libcore/array/mod.rs @@ -14,10 +14,8 @@ use crate::hash::{Hash, self}; use crate::marker::Unsize; use crate::slice::{Iter, IterMut}; -#[cfg(not(bootstrap))] mod iter; -#[cfg(not(bootstrap))] #[unstable(feature = "array_value_iter", issue = "65798")] pub use iter::IntoIter; diff --git a/src/libcore/convert.rs b/src/libcore/convert.rs index 5058e58d0eb9c..e16c384026045 100644 --- a/src/libcore/convert.rs +++ b/src/libcore/convert.rs @@ -557,7 +557,6 @@ impl From for T { /// /// [#64715]: https://github.com/rust-lang/rust/issues/64715 #[stable(feature = "convert_infallible", since = "1.34.0")] -#[cfg(not(bootstrap))] #[rustc_reservation_impl="permitting this impl would forbid us from adding \ `impl From for T` later; see rust-lang/rust#64715 for details"] impl From for T { diff --git a/src/libcore/intrinsics.rs b/src/libcore/intrinsics.rs index 3db85d05d7a98..ffddee89ce55e 100644 --- a/src/libcore/intrinsics.rs +++ b/src/libcore/intrinsics.rs @@ -697,7 +697,6 @@ extern "rust-intrinsic" { pub fn panic_if_uninhabited(); /// Gets a reference to a static `Location` indicating where it was called. - #[cfg(not(bootstrap))] pub fn caller_location() -> &'static crate::panic::Location<'static>; /// Creates a value initialized to zero. @@ -1346,7 +1345,6 @@ extern "rust-intrinsic" { pub fn nontemporal_store(ptr: *mut T, val: T); /// See documentation of `<*const T>::offset_from` for details. - #[cfg(not(bootstrap))] pub fn ptr_offset_from(ptr: *const T, base: *const T) -> isize; } diff --git a/src/libcore/lib.rs b/src/libcore/lib.rs index ca431627147a8..ea5536eb50cae 100644 --- a/src/libcore/lib.rs +++ b/src/libcore/lib.rs @@ -121,7 +121,6 @@ #![feature(hexagon_target_feature)] #![feature(const_int_conversion)] #![feature(const_transmute)] -#![cfg_attr(bootstrap, feature(non_exhaustive))] #![feature(structural_match)] #![feature(abi_unadjusted)] #![feature(adx_target_feature)] diff --git a/src/libcore/macros.rs b/src/libcore/macros.rs index 726d187d2e981..d6b6e26436f31 100644 --- a/src/libcore/macros.rs +++ b/src/libcore/macros.rs @@ -1,30 +1,6 @@ /// Panics the current thread. /// /// For details, see `std::macros`. -#[cfg(bootstrap)] -#[macro_export] -#[allow_internal_unstable(core_panic, panic_internals)] -#[stable(feature = "core", since = "1.6.0")] -macro_rules! panic { - () => ( - $crate::panic!("explicit panic") - ); - ($msg:expr) => ({ - $crate::panicking::panic(&($msg, $crate::file!(), $crate::line!(), $crate::column!())) - }); - ($msg:expr,) => ( - $crate::panic!($msg) - ); - ($fmt:expr, $($arg:tt)+) => ({ - $crate::panicking::panic_fmt($crate::format_args!($fmt, $($arg)+), - &($crate::file!(), $crate::line!(), $crate::column!())) - }); -} - -/// Panics the current thread. -/// -/// For details, see `std::macros`. -#[cfg(not(bootstrap))] #[macro_export] #[allow_internal_unstable(core_panic, // FIXME(anp, eddyb) `core_intrinsics` is used here to allow calling diff --git a/src/libcore/marker.rs b/src/libcore/marker.rs index a25573feabb2b..2d2fc4102e190 100644 --- a/src/libcore/marker.rs +++ b/src/libcore/marker.rs @@ -146,7 +146,6 @@ pub trait Unsize { /// /// [RFC1445]: https://github.com/rust-lang/rfcs/blob/master/text/1445-restrict-constants-in-patterns.md /// [issue 63438]: https://github.com/rust-lang/rust/issues/63438 -#[cfg(not(bootstrap))] #[unstable(feature = "structural_match", issue = "31434")] #[rustc_on_unimplemented(message="the type `{Self}` does not `#[derive(PartialEq)]`")] #[lang = "structural_peq"] @@ -197,7 +196,6 @@ pub trait StructuralPartialEq { /// As a hack to work around this, we use two separate traits injected by each /// of the two derives (`#[derive(PartialEq)]` and `#[derive(Eq)]`) and check /// that both of them are present as part of structural-match checking. -#[cfg(not(bootstrap))] #[unstable(feature = "structural_match", issue = "31434")] #[rustc_on_unimplemented(message="the type `{Self}` does not `#[derive(Eq)]`")] #[lang = "structural_teq"] @@ -517,11 +515,9 @@ macro_rules! impls{ } } - #[cfg(not(bootstrap))] #[unstable(feature = "structural_match", issue = "31434")] impl StructuralPartialEq for $t { } - #[cfg(not(bootstrap))] #[unstable(feature = "structural_match", issue = "31434")] impl StructuralEq for $t { } ) diff --git a/src/libcore/ops/try.rs b/src/libcore/ops/try.rs index e8f35f8cf2450..4f4652084a801 100644 --- a/src/libcore/ops/try.rs +++ b/src/libcore/ops/try.rs @@ -5,20 +5,7 @@ /// extracting those success or failure values from an existing instance and /// creating a new instance from a success or failure value. #[unstable(feature = "try_trait", issue = "42327")] -#[cfg_attr(bootstrap, rustc_on_unimplemented( - on(all( - any(from_method="from_error", from_method="from_ok"), - from_desugaring="QuestionMark"), - message="the `?` operator can only be used in a \ - function that returns `Result` or `Option` \ - (or another type that implements `{Try}`)", - label="cannot use the `?` operator in a function that returns `{Self}`"), - on(all(from_method="into_result", from_desugaring="QuestionMark"), - message="the `?` operator can only be applied to values \ - that implement `{Try}`", - label="the `?` operator cannot be applied to type `{Self}`") -))] -#[cfg_attr(not(bootstrap), rustc_on_unimplemented( +#[rustc_on_unimplemented( on(all( any(from_method="from_error", from_method="from_ok"), from_desugaring="QuestionMark"), @@ -30,7 +17,7 @@ on(all(from_method="into_result", from_desugaring="QuestionMark"), message="the `?` operator can only be applied to values \ that implement `{Try}`", label="the `?` operator cannot be applied to type `{Self}`") -))] +)] #[doc(alias = "?")] pub trait Try { /// The type of this value when viewed as successful. diff --git a/src/libcore/panic.rs b/src/libcore/panic.rs index 51bbf3a8fd221..cdd38449a1be2 100644 --- a/src/libcore/panic.rs +++ b/src/libcore/panic.rs @@ -167,7 +167,7 @@ impl fmt::Display for PanicInfo<'_> { /// /// panic!("Normal panic"); /// ``` -#[cfg_attr(not(bootstrap), lang = "panic_location")] +#[lang = "panic_location"] #[derive(Debug)] #[stable(feature = "panic_hooks", since = "1.10.0")] pub struct Location<'a> { diff --git a/src/libcore/panicking.rs b/src/libcore/panicking.rs index b88dc336097f3..8a6ab99c65a3c 100644 --- a/src/libcore/panicking.rs +++ b/src/libcore/panicking.rs @@ -31,28 +31,6 @@ use crate::fmt; use crate::panic::{Location, PanicInfo}; -#[cfg(bootstrap)] -#[cold] -// never inline unless panic_immediate_abort to avoid code -// bloat at the call sites as much as possible -#[cfg_attr(not(feature="panic_immediate_abort"),inline(never))] -#[lang = "panic"] -pub fn panic(expr_file_line_col: &(&'static str, &'static str, u32, u32)) -> ! { - if cfg!(feature = "panic_immediate_abort") { - unsafe { super::intrinsics::abort() } - } - - // Use Arguments::new_v1 instead of format_args!("{}", expr) to potentially - // reduce size overhead. The format_args! macro uses str's Display trait to - // write expr, which calls Formatter::pad, which must accommodate string - // truncation and padding (even though none is used here). Using - // Arguments::new_v1 may allow the compiler to omit Formatter::pad from the - // output binary, saving up to a few kilobytes. - let (expr, file, line, col) = *expr_file_line_col; - panic_fmt(fmt::Arguments::new_v1(&[expr], &[]), &(file, line, col)) -} - -#[cfg(not(bootstrap))] #[cold] // never inline unless panic_immediate_abort to avoid code // bloat at the call sites as much as possible @@ -72,21 +50,6 @@ pub fn panic(expr: &str, location: &Location<'_>) -> ! { panic_fmt(fmt::Arguments::new_v1(&[expr], &[]), location) } -#[cfg(bootstrap)] -#[cold] -#[cfg_attr(not(feature="panic_immediate_abort"),inline(never))] -#[lang = "panic_bounds_check"] -fn panic_bounds_check(file_line_col: &(&'static str, u32, u32), - index: usize, len: usize) -> ! { - if cfg!(feature = "panic_immediate_abort") { - unsafe { super::intrinsics::abort() } - } - - panic_fmt(format_args!("index out of bounds: the len is {} but the index is {}", - len, index), file_line_col) -} - -#[cfg(not(bootstrap))] #[cold] #[cfg_attr(not(feature="panic_immediate_abort"),inline(never))] #[lang = "panic_bounds_check"] @@ -101,28 +64,6 @@ fn panic_bounds_check(location: &Location<'_>, index: usize, len: usize) -> ! { ) } -#[cfg(bootstrap)] -#[cold] -#[cfg_attr(not(feature="panic_immediate_abort"),inline(never))] -#[cfg_attr( feature="panic_immediate_abort" ,inline)] -pub fn panic_fmt(fmt: fmt::Arguments<'_>, file_line_col: &(&'static str, u32, u32)) -> ! { - if cfg!(feature = "panic_immediate_abort") { - unsafe { super::intrinsics::abort() } - } - - // NOTE This function never crosses the FFI boundary; it's a Rust-to-Rust call - extern "Rust" { - #[lang = "panic_impl"] - fn panic_impl(pi: &PanicInfo<'_>) -> !; - } - - let (file, line, col) = *file_line_col; - let location = Location::internal_constructor(file, line, col); - let pi = PanicInfo::internal_constructor(Some(&fmt), &location); - unsafe { panic_impl(&pi) } -} - -#[cfg(not(bootstrap))] #[cold] #[cfg_attr(not(feature="panic_immediate_abort"),inline(never))] #[cfg_attr( feature="panic_immediate_abort" ,inline)] diff --git a/src/libcore/ptr/mod.rs b/src/libcore/ptr/mod.rs index 5a75730cf2bd4..39d56958f5de0 100644 --- a/src/libcore/ptr/mod.rs +++ b/src/libcore/ptr/mod.rs @@ -1301,7 +1301,6 @@ impl *const T { /// } /// ``` #[unstable(feature = "ptr_offset_from", issue = "41079")] - #[cfg(not(bootstrap))] #[rustc_const_unstable(feature = "const_ptr_offset_from")] #[inline] pub const unsafe fn offset_from(self, origin: *const T) -> isize where T: Sized { @@ -1313,21 +1312,6 @@ impl *const T { intrinsics::ptr_offset_from(self, origin) } - #[unstable(feature = "ptr_offset_from", issue = "41079")] - #[inline] - #[cfg(bootstrap)] - /// bootstrap - pub unsafe fn offset_from(self, origin: *const T) -> isize where T: Sized { - let pointee_size = mem::size_of::(); - assert!(0 < pointee_size && pointee_size <= isize::max_value() as usize); - - // This is the same sequence that Clang emits for pointer subtraction. - // It can be neither `nsw` nor `nuw` because the input is treated as - // unsigned but then the output is treated as signed, so neither works. - let d = isize::wrapping_sub(self as _, origin as _); - intrinsics::exact_div(d, pointee_size as _) - } - /// Calculates the distance between two pointers. The returned value is in /// units of T: the distance in bytes is divided by `mem::size_of::()`. /// diff --git a/src/libcore/sync/atomic.rs b/src/libcore/sync/atomic.rs index d311cb16b64d3..820c1edf930d7 100644 --- a/src/libcore/sync/atomic.rs +++ b/src/libcore/sync/atomic.rs @@ -162,14 +162,14 @@ pub fn spin_loop_hint() { /// This type has the same in-memory representation as a [`bool`]. /// /// [`bool`]: ../../../std/primitive.bool.html -#[cfg(any(bootstrap, target_has_atomic_load_store = "8"))] +#[cfg(target_has_atomic_load_store = "8")] #[stable(feature = "rust1", since = "1.0.0")] #[repr(C, align(1))] pub struct AtomicBool { v: UnsafeCell, } -#[cfg(any(bootstrap, target_has_atomic_load_store = "8"))] +#[cfg(target_has_atomic_load_store = "8")] #[stable(feature = "rust1", since = "1.0.0")] impl Default for AtomicBool { /// Creates an `AtomicBool` initialized to `false`. @@ -179,14 +179,14 @@ impl Default for AtomicBool { } // Send is implicitly implemented for AtomicBool. -#[cfg(any(bootstrap, target_has_atomic_load_store = "8"))] +#[cfg(target_has_atomic_load_store = "8")] #[stable(feature = "rust1", since = "1.0.0")] unsafe impl Sync for AtomicBool {} /// A raw pointer type which can be safely shared between threads. /// /// This type has the same in-memory representation as a `*mut T`. -#[cfg(any(bootstrap, target_has_atomic_load_store = "ptr"))] +#[cfg(target_has_atomic_load_store = "ptr")] #[stable(feature = "rust1", since = "1.0.0")] #[cfg_attr(target_pointer_width = "16", repr(C, align(2)))] #[cfg_attr(target_pointer_width = "32", repr(C, align(4)))] @@ -195,7 +195,7 @@ pub struct AtomicPtr { p: UnsafeCell<*mut T>, } -#[cfg(any(bootstrap, target_has_atomic_load_store = "ptr"))] +#[cfg(target_has_atomic_load_store = "ptr")] #[stable(feature = "rust1", since = "1.0.0")] impl Default for AtomicPtr { /// Creates a null `AtomicPtr`. @@ -204,10 +204,10 @@ impl Default for AtomicPtr { } } -#[cfg(any(bootstrap, target_has_atomic_load_store = "ptr"))] +#[cfg(target_has_atomic_load_store = "ptr")] #[stable(feature = "rust1", since = "1.0.0")] unsafe impl Send for AtomicPtr {} -#[cfg(any(bootstrap, target_has_atomic_load_store = "ptr"))] +#[cfg(target_has_atomic_load_store = "ptr")] #[stable(feature = "rust1", since = "1.0.0")] unsafe impl Sync for AtomicPtr {} @@ -308,7 +308,7 @@ pub enum Ordering { /// An [`AtomicBool`] initialized to `false`. /// /// [`AtomicBool`]: struct.AtomicBool.html -#[cfg(any(bootstrap, target_has_atomic_load_store = "8"))] +#[cfg(target_has_atomic_load_store = "8")] #[stable(feature = "rust1", since = "1.0.0")] #[rustc_deprecated( since = "1.34.0", @@ -317,7 +317,7 @@ pub enum Ordering { )] pub const ATOMIC_BOOL_INIT: AtomicBool = AtomicBool::new(false); -#[cfg(any(bootstrap, target_has_atomic_load_store = "8"))] +#[cfg(target_has_atomic_load_store = "8")] impl AtomicBool { /// Creates a new `AtomicBool`. /// @@ -804,7 +804,7 @@ impl AtomicBool { } } -#[cfg(any(bootstrap, target_has_atomic_load_store = "ptr"))] +#[cfg(target_has_atomic_load_store = "ptr")] impl AtomicPtr { /// Creates a new `AtomicPtr`. /// @@ -1114,7 +1114,7 @@ impl AtomicPtr { } } -#[cfg(any(bootstrap, target_has_atomic_load_store = "8"))] +#[cfg(target_has_atomic_load_store = "8")] #[stable(feature = "atomic_bool_from", since = "1.24.0")] impl From for AtomicBool { /// Converts a `bool` into an `AtomicBool`. @@ -1130,14 +1130,14 @@ impl From for AtomicBool { fn from(b: bool) -> Self { Self::new(b) } } -#[cfg(any(bootstrap, target_has_atomic_load_store = "ptr"))] +#[cfg(target_has_atomic_load_store = "ptr")] #[stable(feature = "atomic_from", since = "1.23.0")] impl From<*mut T> for AtomicPtr { #[inline] fn from(p: *mut T) -> Self { Self::new(p) } } -#[cfg(any(bootstrap, target_has_atomic_load_store = "8"))] +#[cfg(target_has_atomic_load_store = "8")] macro_rules! atomic_int { ($cfg_cas:meta, $stable:meta, @@ -1895,7 +1895,7 @@ assert_eq!(min_foo, 12); } } -#[cfg(any(bootstrap, target_has_atomic_load_store = "8"))] +#[cfg(target_has_atomic_load_store = "8")] atomic_int! { cfg(target_has_atomic = "8"), stable(feature = "integer_atomics_stable", since = "1.34.0"), @@ -1912,7 +1912,7 @@ atomic_int! { "AtomicI8::new(0)", i8 AtomicI8 ATOMIC_I8_INIT } -#[cfg(any(bootstrap, target_has_atomic_load_store = "8"))] +#[cfg(target_has_atomic_load_store = "8")] atomic_int! { cfg(target_has_atomic = "8"), stable(feature = "integer_atomics_stable", since = "1.34.0"), @@ -1929,7 +1929,7 @@ atomic_int! { "AtomicU8::new(0)", u8 AtomicU8 ATOMIC_U8_INIT } -#[cfg(any(bootstrap, target_has_atomic_load_store = "16"))] +#[cfg(target_has_atomic_load_store = "16")] atomic_int! { cfg(target_has_atomic = "16"), stable(feature = "integer_atomics_stable", since = "1.34.0"), @@ -1946,7 +1946,7 @@ atomic_int! { "AtomicI16::new(0)", i16 AtomicI16 ATOMIC_I16_INIT } -#[cfg(any(bootstrap, target_has_atomic_load_store = "16"))] +#[cfg(target_has_atomic_load_store = "16")] atomic_int! { cfg(target_has_atomic = "16"), stable(feature = "integer_atomics_stable", since = "1.34.0"), @@ -1963,7 +1963,7 @@ atomic_int! { "AtomicU16::new(0)", u16 AtomicU16 ATOMIC_U16_INIT } -#[cfg(any(bootstrap, target_has_atomic_load_store = "32"))] +#[cfg(target_has_atomic_load_store = "32")] atomic_int! { cfg(target_has_atomic = "32"), stable(feature = "integer_atomics_stable", since = "1.34.0"), @@ -1980,7 +1980,7 @@ atomic_int! { "AtomicI32::new(0)", i32 AtomicI32 ATOMIC_I32_INIT } -#[cfg(any(bootstrap, target_has_atomic_load_store = "32"))] +#[cfg(target_has_atomic_load_store = "32")] atomic_int! { cfg(target_has_atomic = "32"), stable(feature = "integer_atomics_stable", since = "1.34.0"), @@ -1997,10 +1997,7 @@ atomic_int! { "AtomicU32::new(0)", u32 AtomicU32 ATOMIC_U32_INIT } -#[cfg(any( - all(bootstrap, target_has_atomic = "64"), - target_has_atomic_load_store = "64" -))] +#[cfg(target_has_atomic_load_store = "64")] atomic_int! { cfg(target_has_atomic = "64"), stable(feature = "integer_atomics_stable", since = "1.34.0"), @@ -2017,10 +2014,7 @@ atomic_int! { "AtomicI64::new(0)", i64 AtomicI64 ATOMIC_I64_INIT } -#[cfg(any( - all(bootstrap, target_has_atomic = "64"), - target_has_atomic_load_store = "64" -))] +#[cfg(target_has_atomic_load_store = "64")] atomic_int! { cfg(target_has_atomic = "64"), stable(feature = "integer_atomics_stable", since = "1.34.0"), @@ -2071,22 +2065,22 @@ atomic_int! { "AtomicU128::new(0)", u128 AtomicU128 ATOMIC_U128_INIT } -#[cfg(any(bootstrap, target_has_atomic_load_store = "ptr"))] +#[cfg(target_has_atomic_load_store = "ptr")] #[cfg(target_pointer_width = "16")] macro_rules! ptr_width { () => { 2 } } -#[cfg(any(bootstrap, target_has_atomic_load_store = "ptr"))] +#[cfg(target_has_atomic_load_store = "ptr")] #[cfg(target_pointer_width = "32")] macro_rules! ptr_width { () => { 4 } } -#[cfg(any(bootstrap, target_has_atomic_load_store = "ptr"))] +#[cfg(target_has_atomic_load_store = "ptr")] #[cfg(target_pointer_width = "64")] macro_rules! ptr_width { () => { 8 } } -#[cfg(any(bootstrap, target_has_atomic_load_store = "ptr"))] +#[cfg(target_has_atomic_load_store = "ptr")] atomic_int!{ cfg(target_has_atomic = "ptr"), stable(feature = "rust1", since = "1.0.0"), @@ -2103,7 +2097,7 @@ atomic_int!{ "AtomicIsize::new(0)", isize AtomicIsize ATOMIC_ISIZE_INIT } -#[cfg(any(bootstrap, target_has_atomic_load_store = "ptr"))] +#[cfg(target_has_atomic_load_store = "ptr")] atomic_int!{ cfg(target_has_atomic = "ptr"), stable(feature = "rust1", since = "1.0.0"), @@ -2530,7 +2524,7 @@ pub fn compiler_fence(order: Ordering) { } -#[cfg(any(bootstrap, target_has_atomic_load_store = "8"))] +#[cfg(target_has_atomic_load_store = "8")] #[stable(feature = "atomic_debug", since = "1.3.0")] impl fmt::Debug for AtomicBool { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { @@ -2538,7 +2532,7 @@ impl fmt::Debug for AtomicBool { } } -#[cfg(any(bootstrap, target_has_atomic_load_store = "ptr"))] +#[cfg(target_has_atomic_load_store = "ptr")] #[stable(feature = "atomic_debug", since = "1.3.0")] impl fmt::Debug for AtomicPtr { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { @@ -2546,7 +2540,7 @@ impl fmt::Debug for AtomicPtr { } } -#[cfg(any(bootstrap, target_has_atomic_load_store = "ptr"))] +#[cfg(target_has_atomic_load_store = "ptr")] #[stable(feature = "atomic_pointer", since = "1.24.0")] impl fmt::Pointer for AtomicPtr { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { diff --git a/src/libpanic_unwind/seh.rs b/src/libpanic_unwind/seh.rs index 621813a2fee95..ff9a215d339e3 100644 --- a/src/libpanic_unwind/seh.rs +++ b/src/libpanic_unwind/seh.rs @@ -98,9 +98,6 @@ use libc::{c_int, c_uint, c_void}; mod imp { pub type ptr_t = *mut u8; - #[cfg(bootstrap)] - pub const NAME1: [u8; 7] = [b'.', b'P', b'A', b'_', b'K', 0, 0]; - macro_rules! ptr { (0) => (core::ptr::null_mut()); ($e:expr) => ($e as *mut u8); @@ -112,9 +109,6 @@ mod imp { mod imp { pub type ptr_t = u32; - #[cfg(bootstrap)] - pub const NAME1: [u8; 7] = [b'.', b'P', b'E', b'A', b'_', b'K', 0]; - extern "C" { pub static __ImageBase: u8; } @@ -161,17 +155,11 @@ pub struct _PMD { pub struct _TypeDescriptor { pub pVFTable: *const u8, pub spare: *mut u8, - #[cfg(bootstrap)] - pub name: [u8; 7], - #[cfg(not(bootstrap))] pub name: [u8; 11], } // Note that we intentionally ignore name mangling rules here: we don't want C++ // to be able to catch Rust panics by simply declaring a `struct rust_panic`. -#[cfg(bootstrap)] -use imp::NAME1 as TYPE_NAME; -#[cfg(not(bootstrap))] const TYPE_NAME: [u8; 11] = *b"rust_panic\0"; static mut THROW_INFO: _ThrowInfo = _ThrowInfo { @@ -194,9 +182,6 @@ static mut CATCHABLE_TYPE: _CatchableType = _CatchableType { pdisp: -1, vdisp: 0, }, - #[cfg(bootstrap)] - sizeOrOffset: mem::size_of::<*mut u64>() as c_int, - #[cfg(not(bootstrap))] sizeOrOffset: mem::size_of::<[u64; 2]>() as c_int, copy_function: ptr!(0), }; @@ -218,8 +203,7 @@ extern "C" { // an argument to the C++ personality function. // // Again, I'm not entirely sure what this is describing, it just seems to work. -#[cfg_attr(bootstrap, lang = "msvc_try_filter")] -#[cfg_attr(not(any(test, bootstrap)), lang = "eh_catch_typeinfo")] +#[cfg_attr(not(test), lang = "eh_catch_typeinfo")] static mut TYPE_DESCRIPTOR: _TypeDescriptor = _TypeDescriptor { pVFTable: unsafe { &TYPE_INFO_VTABLE } as *const _ as *const _, spare: core::ptr::null_mut(), @@ -238,12 +222,8 @@ pub unsafe fn panic(data: Box) -> u32 { // exception (constructed above). let ptrs = mem::transmute::<_, raw::TraitObject>(data); let mut ptrs = [ptrs.data as u64, ptrs.vtable as u64]; - let mut ptrs_ptr = ptrs.as_mut_ptr(); - let throw_ptr = if cfg!(bootstrap) { - &mut ptrs_ptr as *mut _ as *mut _ - } else { - ptrs_ptr as *mut _ - }; + let ptrs_ptr = ptrs.as_mut_ptr(); + let throw_ptr = ptrs_ptr as *mut _; // This... may seems surprising, and justifiably so. On 32-bit MSVC the // pointers between these structure are just that, pointers. On 64-bit MSVC, diff --git a/src/libproc_macro/lib.rs b/src/libproc_macro/lib.rs index 6166561d87f15..87cd8fcb14385 100644 --- a/src/libproc_macro/lib.rs +++ b/src/libproc_macro/lib.rs @@ -25,7 +25,6 @@ #![feature(extern_types)] #![feature(in_band_lifetimes)] #![feature(optin_builtin_traits)] -#![cfg_attr(bootstrap, feature(non_exhaustive))] #![feature(rustc_attrs)] #![feature(specialization)] diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs index 996f5b1241263..0ea33d725f1e7 100644 --- a/src/librustc/lib.rs +++ b/src/librustc/lib.rs @@ -41,7 +41,6 @@ #![feature(overlapping_marker_traits)] #![feature(extern_types)] #![feature(nll)] -#![cfg_attr(bootstrap, feature(non_exhaustive))] #![feature(optin_builtin_traits)] #![feature(option_expect_none)] #![feature(range_is_empty)] @@ -57,7 +56,6 @@ #![feature(test)] #![feature(in_band_lifetimes)] #![feature(crate_visibility_modifier)] -#![cfg_attr(bootstrap, feature(proc_macro_hygiene))] #![feature(log_syntax)] #![feature(associated_type_bounds)] #![feature(rustc_attrs)] diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs index 927fd2a6b0bc6..72d998de9c4b7 100644 --- a/src/libstd/lib.rs +++ b/src/libstd/lib.rs @@ -283,7 +283,6 @@ #![feature(needs_panic_runtime)] #![feature(never_type)] #![feature(nll)] -#![cfg_attr(bootstrap, feature(non_exhaustive))] #![cfg_attr(bootstrap, feature(on_unimplemented))] #![feature(optin_builtin_traits)] #![feature(panic_info_message)] diff --git a/src/libstd/panic.rs b/src/libstd/panic.rs index 577673b7e405b..e36496d4c1c0d 100644 --- a/src/libstd/panic.rs +++ b/src/libstd/panic.rs @@ -13,7 +13,6 @@ use crate::panicking; use crate::ptr::{Unique, NonNull}; use crate::rc::Rc; use crate::sync::{Arc, Mutex, RwLock}; -#[cfg(not(bootstrap))] use crate::sync::atomic; use crate::task::{Context, Poll}; use crate::thread::Result; diff --git a/src/libsyntax_pos/lib.rs b/src/libsyntax_pos/lib.rs index dc29b189639ce..a762d8af49a21 100644 --- a/src/libsyntax_pos/lib.rs +++ b/src/libsyntax_pos/lib.rs @@ -9,10 +9,8 @@ #![feature(const_fn)] #![feature(crate_visibility_modifier)] #![feature(nll)] -#![cfg_attr(bootstrap, feature(non_exhaustive))] #![feature(optin_builtin_traits)] #![feature(rustc_attrs)] -#![cfg_attr(bootstrap, feature(proc_macro_hygiene))] #![feature(specialization)] #![feature(step_trait)] diff --git a/src/stage0.txt b/src/stage0.txt index 9509d3e99612f..3c84890158381 100644 --- a/src/stage0.txt +++ b/src/stage0.txt @@ -12,7 +12,7 @@ # source tarball for a stable release you'll likely see `1.x.0` for rustc and # `0.x.0` for Cargo where they were released on `date`. -date: 2019-09-25 +date: 2019-11-06 rustc: beta cargo: beta diff --git a/src/tools/compiletest/src/main.rs b/src/tools/compiletest/src/main.rs index 34435819a2c46..b115539b4af3b 100644 --- a/src/tools/compiletest/src/main.rs +++ b/src/tools/compiletest/src/main.rs @@ -568,6 +568,7 @@ pub fn test_opts(config: &Config) -> test::TestOpts { skip: vec![], list: false, options: test::Options::new(), + time_options: None, } } @@ -703,6 +704,7 @@ pub fn make_test(config: &Config, testpaths: &TestPaths) -> Vec