diff --git a/RELEASES.md b/RELEASES.md index 37aed7735455b..be11f64412358 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,3 +1,141 @@ +Version 1.47.0 (2020-10-08) +========================== + +Language +-------- +- [Closures will now warn when not used.][74869] + +Compiler +-------- +- [Stabilized the `-C control-flow-guard` codegen option][73893], which enables + [Control Flow Guard][1.47.0-cfg] for Windows platforms, and is ignored on other + platforms. +- [Upgraded to LLVM 11.][73526] +- [Added tier 3\* support for the `thumbv4t-none-eabi` target.][74419] +- [Upgrade the FreeBSD toolchain to version 11.4][75204] +- [`RUST_BACKTRACE`'s output is now more compact.][75048] + +\* Refer to Rust's [platform support page][forge-platform-support] for more +information on Rust's tiered platform support. + +Libraries +--------- +- [`CStr` now implements `Index>`.][74021] +- [Traits in `std`/`core` are now implemented for arrays of any length, not just + those of length less than 33.][74060] +- [`ops::RangeFull` and `ops::Range` now implement Default.][73197] +- [`panic::Location` now implements `Copy`, `Clone`, `Eq`, `Hash`, `Ord`, + `PartialEq`, and `PartialOrd`.][73583] + +Stabilized APIs +--------------- +- [`Ident::new_raw`] +- [`Range::is_empty`] +- [`RangeInclusive::is_empty`] +- [`Result::as_deref`] +- [`Result::as_deref_mut`] +- [`Vec::leak`] +- [`pointer::offset_from`] +- [`f32::TAU`] +- [`f64::TAU`] + +The following previously stable APIs have now been made const. + +- [The `new` method for all `NonZero` integers.][73858] +- [The `checked_add`,`checked_sub`,`checked_mul`,`checked_neg`, `checked_shl`, + `checked_shr`, `saturating_add`, `saturating_sub`, and `saturating_mul` + methods for all integers.][73858] +- [The `checked_abs`, `saturating_abs`, `saturating_neg`, and `signum` for all + signed integers.][73858] +- [The `is_ascii_alphabetic`, `is_ascii_uppercase`, `is_ascii_lowercase`, + `is_ascii_alphanumeric`, `is_ascii_digit`, `is_ascii_hexdigit`, + `is_ascii_punctuation`, `is_ascii_graphic`, `is_ascii_whitespace`, and + `is_ascii_control` methods for `char` and `u8`.][73858] + +Cargo +----- +- [`build-dependencies` are now built with opt-level 0 by default.][cargo/8500] + You can override this by setting the following in your `Cargo.toml`. + ```toml + [profile.release.build-override] + opt-level = 3 + ``` +- [`cargo-help` will now display man pages for commands rather just the + `--help` text.][cargo/8456] +- [`cargo-metadata` now emits a `test` field indicating if a target has + tests enabled.][cargo/8478] +- [`workspace.default-members` now respects `workspace.exclude`.][cargo/8485] +- [`cargo-publish` will now use an alternative registry by default if it's the + only registry specified in `package.publish`.][cargo/8571] + +Misc +---- +- [Added a help button beside Rustdoc's searchbar that explains rustdoc's + type based search.][75366] +- [Added the Ayu theme to rustdoc.][71237] + +Compatibility Notes +------------------- +- [Bumped the minimum supported Emscripten version to 1.39.20.][75716] +- [Fixed a regression parsing `{} && false` in tail expressions.][74650] +- [Added changes to how proc-macros are expanded in `macro_rules!` that should + help to preserve more span information.][73084] These changes may cause + compiliation errors if your macro was unhygenic or didn't correctly handle + `Delimiter::None`. +- [Moved support for the CloudABI target to tier 3.][75568] +- [`linux-gnu` targets now require minimum kernel 2.6.32 and glibc 2.11.][74163] +- [We have reports of some proc macros encountering as yet undiagnosed problems in linked C++ + code, but the root cause is as yet undiagnosed.][76980] + +Internal Only +-------- +- [Improved default settings for bootstrapping in `x.py`.][73964] You can read details about this change in the ["Changes to `x.py` defaults"](https://blog.rust-lang.org/inside-rust/2020/08/30/changes-to-x-py-defaults.html) post on the Inside Rust blog. +- [Added the `rustc-docs` component.][75560] This allows you to install + and read the documentation for the compiler internal APIs. (Currently only + available for `x86_64-unknown-linux-gnu`.) + +[1.47.0-cfg]: https://docs.microsoft.com/en-us/windows/win32/secbp/control-flow-guard +[76980]: https://github.com/rust-lang/rust/issues/76980 +[75048]: https://github.com/rust-lang/rust/pull/75048/ +[74163]: https://github.com/rust-lang/rust/pull/74163/ +[71237]: https://github.com/rust-lang/rust/pull/71237/ +[74869]: https://github.com/rust-lang/rust/pull/74869/ +[73858]: https://github.com/rust-lang/rust/pull/73858/ +[75716]: https://github.com/rust-lang/rust/pull/75716/ +[75908]: https://github.com/rust-lang/rust/pull/75908/ +[75516]: https://github.com/rust-lang/rust/pull/75516/ +[75560]: https://github.com/rust-lang/rust/pull/75560/ +[75568]: https://github.com/rust-lang/rust/pull/75568/ +[75366]: https://github.com/rust-lang/rust/pull/75366/ +[75204]: https://github.com/rust-lang/rust/pull/75204/ +[74650]: https://github.com/rust-lang/rust/pull/74650/ +[74419]: https://github.com/rust-lang/rust/pull/74419/ +[73964]: https://github.com/rust-lang/rust/pull/73964/ +[74021]: https://github.com/rust-lang/rust/pull/74021/ +[74060]: https://github.com/rust-lang/rust/pull/74060/ +[73893]: https://github.com/rust-lang/rust/pull/73893/ +[73526]: https://github.com/rust-lang/rust/pull/73526/ +[73583]: https://github.com/rust-lang/rust/pull/73583/ +[73084]: https://github.com/rust-lang/rust/pull/73084/ +[73197]: https://github.com/rust-lang/rust/pull/73197/ +[72488]: https://github.com/rust-lang/rust/pull/72488/ +[cargo/8456]: https://github.com/rust-lang/cargo/pull/8456/ +[cargo/8478]: https://github.com/rust-lang/cargo/pull/8478/ +[cargo/8485]: https://github.com/rust-lang/cargo/pull/8485/ +[cargo/8500]: https://github.com/rust-lang/cargo/pull/8500/ +[cargo/8571]: https://github.com/rust-lang/cargo/pull/8571/ +[`Ident::new_raw`]: https://doc.rust-lang.org/nightly/proc_macro/struct.Ident.html#method.new_raw +[`Range::is_empty`]: https://doc.rust-lang.org/nightly/std/ops/struct.Range.html#method.is_empty +[`RangeInclusive::is_empty`]: https://doc.rust-lang.org/nightly/std/ops/struct.RangeInclusive.html#method.is_empty +[`Result::as_deref_mut`]: https://doc.rust-lang.org/nightly/std/result/enum.Result.html#method.as_deref_mut +[`Result::as_deref`]: https://doc.rust-lang.org/nightly/std/result/enum.Result.html#method.as_deref +[`TypeId::of`]: https://doc.rust-lang.org/nightly/std/any/struct.TypeId.html#method.of +[`Vec::leak`]: https://doc.rust-lang.org/nightly/std/vec/struct.Vec.html#method.leak +[`f32::TAU`]: https://doc.rust-lang.org/nightly/std/f32/consts/constant.TAU.html +[`f64::TAU`]: https://doc.rust-lang.org/nightly/std/f64/consts/constant.TAU.html +[`pointer::offset_from`]: https://doc.rust-lang.org/nightly/std/primitive.pointer.html#method.offset_from + + Version 1.46.0 (2020-08-27) ========================== @@ -10,7 +148,7 @@ Language function's caller's location information for panic messages.][72445] - [Recursively indexing into tuples no longer needs parentheses.][71322] E.g. `x.0.0` over `(x.0).0`. -- [`mem::transmute` can now be used in static and constants.][72920] **Note** +- [`mem::transmute` can now be used in statics and constants.][72920] **Note** You currently can't use `mem::transmute` in constant functions. Compiler @@ -51,7 +189,7 @@ Compatibility Notes ------------------- - [The target configuration option `abi_blacklist` has been renamed to `unsupported_abis`.][74150] The old name will still continue to work. -- [Rustc will now warn if you have a C-like enum that implements `Drop`.][72331] +- [Rustc will now warn if you cast a C-like enum that implements `Drop`.][72331] This was previously accepted but will become a hard error in a future release. - [Rustc will fail to compile if you have a struct with `#[repr(i128)]` or `#[repr(u128)]`.][74109] This representation is currently only diff --git a/src/ci/run.sh b/src/ci/run.sh index 36df39c9490d0..59510f5945b0b 100755 --- a/src/ci/run.sh +++ b/src/ci/run.sh @@ -63,7 +63,7 @@ fi # # FIXME: need a scheme for changing this `nightly` value to `beta` and `stable` # either automatically or manually. -export RUST_RELEASE_CHANNEL=beta +export RUST_RELEASE_CHANNEL=stable # Always set the release channel for bootstrap; this is normally not important (i.e., only dist # builds would seem to matter) but in practice bootstrap wants to know whether we're targeting diff --git a/src/librustc_codegen_ssa/back/command.rs b/src/librustc_codegen_ssa/back/command.rs index 0208bb73abdbe..503c51d24b682 100644 --- a/src/librustc_codegen_ssa/back/command.rs +++ b/src/librustc_codegen_ssa/back/command.rs @@ -111,6 +111,12 @@ impl Command { LldFlavor::Link => "link", LldFlavor::Ld64 => "darwin", }); + if let LldFlavor::Wasm = flavor { + // LLVM expects host-specific formatting for @file + // arguments, but we always generate posix formatted files + // at this time. Indicate as such. + c.arg("--rsp-quoting=posix"); + } c } }; diff --git a/src/librustc_mir/transform/simplify_try.rs b/src/librustc_mir/transform/simplify_try.rs index 36011b70f443f..9a80f0818c373 100644 --- a/src/librustc_mir/transform/simplify_try.rs +++ b/src/librustc_mir/transform/simplify_try.rs @@ -613,7 +613,8 @@ impl<'a, 'tcx> SimplifyBranchSameOptimizationFinder<'a, 'tcx> { // All successor basic blocks must be equal or contain statements that are pairwise considered equal. for ((bb_l_idx,bb_l), (bb_r_idx,bb_r)) in iter_bbs_reachable.tuple_windows() { let trivial_checks = bb_l.is_cleanup == bb_r.is_cleanup - && bb_l.terminator().kind == bb_r.terminator().kind; + && bb_l.terminator().kind == bb_r.terminator().kind + && bb_l.statements.len() == bb_r.statements.len(); let statement_check = || { bb_l.statements.iter().zip(&bb_r.statements).try_fold(StatementEquality::TrivialEqual, |acc,(l,r)| { let stmt_equality = self.statement_equality(*adt_matched_on, &l, bb_l_idx, &r, bb_r_idx, self.tcx.sess.opts.debugging_opts.mir_opt_level); diff --git a/src/test/ui/mir/simplify-branch-same.rs b/src/test/ui/mir/simplify-branch-same.rs new file mode 100644 index 0000000000000..d631c33d61f84 --- /dev/null +++ b/src/test/ui/mir/simplify-branch-same.rs @@ -0,0 +1,21 @@ +// Regression test for SimplifyBranchSame miscompilation. +// run-pass + +macro_rules! m { + ($a:expr, $b:expr, $c:block) => { + match $a { + Lto::Fat | Lto::Thin => { $b; (); $c } + Lto::No => { $b; () } + } + } +} + +pub enum Lto { No, Thin, Fat } + +fn f(mut cookie: u32, lto: Lto) -> u32 { + let mut _a = false; + m!(lto, _a = true, {cookie = 0}); + cookie +} + +fn main() { assert_eq!(f(42, Lto::Thin), 0) }