Change enum->int casts to not go through MIR casts. by oli-obk · Pull Request #96862 · rust-lang/rust (original) (raw)
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Conversation52 Commits4 Checks0 Files changed
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
[ Show hidden characters]({{ revealButtonHref }})
follow-up to #96814
this simplifies all backends and even gives LLVM more information about the return value of Rvalue::Discriminant
, enabling optimizations in more cases.
rustbot added the T-compiler
Relevant to the compiler team, which will review and decide on the PR/issue.
label
(rust-highfive has picked a reviewer for you, use r? to override)
Awaiting bors try build completion.
@rustbot label: +S-waiting-on-perf
⌛ Trying commit aba79aecc904cc5cd0174804c375a2bdac4baa82 with merge 9070d93994dedb99925dcdbee841e40c34eee7d4...
follow-up to #96814
To be clear, your PR needs to land first before #96814 can make progress.
This comment has been minimized.
Looks like the perf run didn't go through. Not sure if the old try build is still sufficiently up-to-date, so let's
@bors try @rust-timer queue
Awaiting bors try build completion.
@rustbot label: +S-waiting-on-perf
⌛ Trying commit 6acd3d5d4411ab9fd4a566bbd0185ab61a4d94b3 with merge 4abfc5bbf05d4e7b813ae10bca09b45cc3e1dcf2...
☀️ Try build successful - checks-actions
Build commit: 4abfc5bbf05d4e7b813ae10bca09b45cc3e1dcf2 (4abfc5bbf05d4e7b813ae10bca09b45cc3e1dcf2
)
Finished benchmarking commit (4abfc5bbf05d4e7b813ae10bca09b45cc3e1dcf2): comparison url.
Summary:
- Primary benchmarks: no relevant changes found
- Secondary benchmarks: 🎉 relevant improvement found
Regressions 😿 (primary) | Regressions 😿 (secondary) | Improvements 🎉 (primary) | Improvements 🎉 (secondary) | All 😿 🎉 (primary) | |
---|---|---|---|---|---|
count1 | 0 | 0 | 0 | 1 | 0 |
mean2 | N/A | N/A | N/A | -0.2% | N/A |
max | N/A | N/A | N/A | -0.2% | N/A |
If you disagree with this performance assessment, please file an issue in rust-lang/rustc-perf.
Benchmarking this pull request likely means that it is perf-sensitive, so we're automatically marking it as not fit for rolling up. While you can manually mark this PR as fit for rollup, we strongly recommend not doing so since this PR may lead to changes in compiler perf.
@bors rollup=never
@rustbot label: +S-waiting-on-review -S-waiting-on-perf -perf-regression
Footnotes
This is ready for a final review (though is just some minor rebase fixes compared to the earlier version that loses the assume
s, too)
This comment has been minimized.
Instead we generate a discriminant rvalue and cast the result of that.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM (r=me), modulo the question and also maybe changing some/all of these new instrument
to trace
📌 Commit 82c73af has been approved by RalfJung
bors added S-waiting-on-bors
Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
and removed S-waiting-on-review
Status: Awaiting review from the assignee but also interested parties.
labels
Finished benchmarking commit (53792b9): comparison url.
Instruction count
- Primary benchmarks: 🎉 relevant improvement found
- Secondary benchmarks: 🎉 relevant improvement found
mean1 | max | count2 | |
---|---|---|---|
Regressions 😿 (primary) | N/A | N/A | 0 |
Regressions 😿 (secondary) | N/A | N/A | 0 |
Improvements 🎉 (primary) | -0.5% | -0.5% | 1 |
Improvements 🎉 (secondary) | -0.7% | -0.7% | 1 |
All 😿🎉 (primary) | -0.5% | -0.5% | 1 |
Max RSS (memory usage)
Results
- Primary benchmarks: 🎉 relevant improvement found
- Secondary benchmarks: mixed results
mean1 | max | count2 | |
---|---|---|---|
Regressions 😿 (primary) | N/A | N/A | 0 |
Regressions 😿 (secondary) | 5.1% | 5.1% | 1 |
Improvements 🎉 (primary) | -0.0% | -0.0% | 1 |
Improvements 🎉 (secondary) | -2.5% | -2.8% | 2 |
All 😿🎉 (primary) | -0.0% | -0.0% | 1 |
Cycles
Results
- Primary benchmarks: 😿 relevant regression found
- Secondary benchmarks: no relevant changes found
mean1 | max | count2 | |
---|---|---|---|
Regressions 😿 (primary) | 2.5% | 2.5% | 1 |
Regressions 😿 (secondary) | N/A | N/A | 0 |
Improvements 🎉 (primary) | N/A | N/A | 0 |
Improvements 🎉 (secondary) | N/A | N/A | 0 |
All 😿🎉 (primary) | 2.5% | 2.5% | 1 |
If you disagree with this performance assessment, please file an issue in rust-lang/rustc-perf.
@rustbot label: -perf-regression
Footnotes
JohnTitor pushed a commit to JohnTitor/rust that referenced this pull request
Change enum->int casts to not go through MIR casts.
follow-up to rust-lang#96814
this simplifies all backends and even gives LLVM more information about the return value of Rvalue::Discriminant
, enabling optimizations in more cases.
bors added a commit to rust-lang-ci/rust that referenced this pull request
Lower the assume intrinsic to a MIR statement
This makes rust-lang#96862 (comment) easier and will generally allow us to cheaply insert assume intrinsic calls in mir building.
r? rust-lang/wg-mir-opt
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull request
Pkgsrc changes:
- Add patch to fix vendor/kqueue issue (on 32-bit hosts)
- Adjust other patches & line numbers
- Version bumps & checksum changes.
Upstream changes:
Version 1.64.0 (2022-09-22)
Language
Unions with mutable references or tuples of allowed types are now allowed
It is now considered valid to deallocate memory pointed to by a shared reference
&T
if every byte inT
is inside anUnsafeCell
Unused tuple struct fields are now warned against in an allow-by-default lint, [
unused_tuple_struct_fields
] (rust-lang/rust#95977), similar to the existing warning for unused struct fields. This lint will become warn-by-default in the future.
Compiler
- [Add Nintendo Switch as tier 3 target]
(rust-lang/rust#88991)
- Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support.
- [Only compile
#[used]
as llvm.compiler.used for ELF targets] (rust-lang/rust#93718) - [Add the
--diagnostic-width
compiler flag to define the terminal width.] (rust-lang/rust#95635) - [Add support for link-flavor
rust-lld
for iOS, tvOS and watchOS] (rust-lang/rust#98771)
Libraries
- [Remove restrictions on compare-exchange memory ordering.] (rust-lang/rust#98383)
- You can now
write!
orwriteln!
into anOsString
: Implementfmt::Write
forOsString
- [Make RwLockReadGuard covariant] (rust-lang/rust#96820)
- [Implement
FusedIterator
forstd:🥅:[Into]Incoming
] (rust-lang/rust#97300) - [
impl<T: AsRawFd> AsRawFd for {Arc,Box}<T>
] (rust-lang/rust#97437) - [
ptr::copy
andptr::swap
are doing untyped copies] (rust-lang/rust#97712) - [Add cgroupv1 support to
available_parallelism
] (rust-lang/rust#97925) - [Mitigate many incorrect uses of
mem::uninitialized
] (rust-lang/rust#99182)
Stabilized APIs
- [
future::IntoFuture
] (https://doc.rust-lang.org/stable/std/future/trait.IntoFuture.html) - [
future::poll_fn
] (https://doc.rust-lang.org/stable/std/future/fn.poll_fn.html) - [
task::ready!
] (https://doc.rust-lang.org/stable/std/task/macro.ready.html) - [
num::NonZero*::checked_mul
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_mul) - [
num::NonZero*::checked_pow
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_pow) - [
num::NonZero*::saturating_mul
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.saturating_mul) - [
num::NonZero*::saturating_pow
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.saturating_pow) - [
num::NonZeroI*::abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.abs) - [
num::NonZeroI*::checked_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.checked_abs) - [
num::NonZeroI*::overflowing_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.overflowing_abs) - [
num::NonZeroI*::saturating_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.saturating_abs) - [
num::NonZeroI*::unsigned_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.unsigned_abs) - [
num::NonZeroI*::wrapping_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.wrapping_abs) - [
num::NonZeroU*::checked_add
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_add) - [
num::NonZeroU*::checked_next_power_of_two
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_next_power_of_two) - [
num::NonZeroU*::saturating_add
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.saturating_add) - [
os::unix::process::CommandExt::process_group
] (https://doc.rust-lang.org/stable/std/os/unix/process/trait.CommandExt.html#tymethod.process_group) - [
os::windows::fs::FileTypeExt::is_symlink_dir
] (https://doc.rust-lang.org/stable/std/os/windows/fs/trait.FileTypeExt.html#tymethod.is_symlink_dir) - [
os::windows::fs::FileTypeExt::is_symlink_file
] (https://doc.rust-lang.org/stable/std/os/windows/fs/trait.FileTypeExt.html#tymethod.is_symlink_file)
These types were previously stable in std::ffi
, but are now also
available in core
and alloc
:
- [
core::ffi::CStr
] (https://doc.rust-lang.org/stable/core/ffi/struct.CStr.html) - [
core::ffi::FromBytesWithNulError
] (https://doc.rust-lang.org/stable/core/ffi/struct.FromBytesWithNulError.html) - [
alloc::ffi::CString
] (https://doc.rust-lang.org/stable/alloc/ffi/struct.CString.html) - [
alloc::ffi::FromVecWithNulError
] (https://doc.rust-lang.org/stable/alloc/ffi/struct.FromVecWithNulError.html) - [
alloc::ffi::IntoStringError
] (https://doc.rust-lang.org/stable/alloc/ffi/struct.IntoStringError.html) - [
alloc::ffi::NulError
] (https://doc.rust-lang.org/stable/alloc/ffi/struct.NulError.html)
These types were previously stable in std::os::raw
, but are now also available in core::ffi
and std::ffi
:
- [
ffi::c_char
] (https://doc.rust-lang.org/stable/std/ffi/type.c_char.html) - [
ffi::c_double
] (https://doc.rust-lang.org/stable/std/ffi/type.c_double.html) - [
ffi::c_float
] (https://doc.rust-lang.org/stable/std/ffi/type.c_float.html) - [
ffi::c_int
] (https://doc.rust-lang.org/stable/std/ffi/type.c_int.html) - [
ffi::c_long
] (https://doc.rust-lang.org/stable/std/ffi/type.c_long.html) - [
ffi::c_longlong
] (https://doc.rust-lang.org/stable/std/ffi/type.c_longlong.html) - [
ffi::c_schar
] (https://doc.rust-lang.org/stable/std/ffi/type.c_schar.html) - [
ffi::c_short
] (https://doc.rust-lang.org/stable/std/ffi/type.c_short.html) - [
ffi::c_uchar
] (https://doc.rust-lang.org/stable/std/ffi/type.c_uchar.html) - [
ffi::c_uint
] (https://doc.rust-lang.org/stable/std/ffi/type.c_uint.html) - [
ffi::c_ulong
] (https://doc.rust-lang.org/stable/std/ffi/type.c_ulong.html) - [
ffi::c_ulonglong
] (https://doc.rust-lang.org/stable/std/ffi/type.c_ulonglong.html) - [
ffi::c_ushort
] (https://doc.rust-lang.org/stable/std/ffi/type.c_ushort.html)
These APIs are now usable in const contexts:
- [
slice::from_raw_parts
] (https://doc.rust-lang.org/stable/core/slice/fn.from_raw_parts.html)
Cargo
- [Packages can now inherit settings from the workspace so that
the settings can be centralized in one place.]
(rust-lang/cargo#10859) See
workspace.package
andworkspace.dependencies
for more details on how to define these common settings. - [Cargo commands can now accept multiple
--target
flags to build for multiple targets at once] (rust-lang/cargo#10766), and thebuild.target
config option may now take an array of multiple targets. - [The
--jobs
argument can now take a negative number to count backwards from the max CPUs.] (rust-lang/cargo#10844) - [
cargo add
will now updateCargo.lock
.] (rust-lang/cargo#10902) - Added the
--crate-type
flag tocargo rustc
to override the crate type. - [Significantly improved the performance fetching git dependencies from GitHub
when using a hash in the
rev
field.] (rust-lang/cargo#10079)
Misc
- [The
rust-analyzer
rustup component is now available on the stable channel.] (rust-lang/rust#98640)
Compatibility Notes
- The minimum required versions for all
-linux-gnu
targets are now at least kernel 3.2 and glibc 2.17, for targets that previously supported older versions: Increase the minimum linux-gnu versions - [Network primitives are now implemented with the ideal Rust layout, not the C system layout] (rust-lang/rust#78802). This can cause problems when transmuting the types.
- [Add assertion that
transmute_copy
'sU
is not larger thanT
] (rust-lang/rust#98839) - [A soundness bug in
BTreeMap
was fixed] (rust-lang/rust#99413) that allowed data it was borrowing to be dropped before the container. - [The Drop behavior of C-like enums cast to ints has changed] (rust-lang/rust#96862). These are already discouraged by a compiler warning.
- [Relate late-bound closure lifetimes to parent fn in NLL] (rust-lang/rust#98835)
- [Errors at const-eval time are now in future incompatibility reports] (rust-lang/rust#97743)
- On the
thumbv6m-none-eabi
target, some incorrectasm!
statements were erroneously accepted if they used the high registers (r8 to r14) as an input/output operand. [This is no longer accepted] (rust-lang/rust#99155). - [
impl Trait
was accidentally accepted as the associated type value of return-positionimpl Trait
] (rust-lang/rust#97346), without fulfilling all the trait bounds of that associated type, as long as the hidden type satisfies said bounds. This has been fixed.
Internal Changes
These changes do not affect any public interfaces of Rust, but they represent significant improvements to the performance or internals of rustc and related tools.
- Windows builds now use profile-guided optimization, providing 10-20% improvements to compiler performance: [Utilize PGO for windows x64 rustc dist builds] (rust-lang/rust#96978)
- [Stop keeping metadata in memory before writing it to disk] (rust-lang/rust#96544)
- [compiletest: strip debuginfo by default for mode=ui] (rust-lang/rust#98140)
- Many improvements to generated code for derives, including
performance improvements:
- [Don't use match-destructuring for derived ops on structs.] (rust-lang/rust#98446)
- [Many small deriving cleanups] (rust-lang/rust#98741)
- [More derive output improvements] (rust-lang/rust#98758)
- Clarify deriving code
- [Final derive output improvements] (rust-lang/rust#99046)
- Stop injecting
#[allow(unused_qualifications)]
in generatedderive
implementations - Improve
derive(Debug)
- Bump to clap 3
- fully move dropck to mir
- [Optimize
Vec::insert
for the case whereindex == len
.] (rust-lang/rust#98755) - [Convert rust-analyzer to an in-tree tool] (rust-lang/rust#99603)
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request
Pkgsrc changes:
- This package now contains rust-analyzer, so implicitly conflicts with that pkgsrc package. The same goes for the rust-src package.
- Add NetBSD/arm6 port
- Add unfinished NetBSD/mipsel port
- Revert the use of the internal LLVM, should now build with the new pkgsrc LLVM (15).
- Add depndence on compat80 for sparc64 to fix the build
- Adapt patches
- Add CHECK_INTERPRETER_SKIP for a few (mostly unused) files. (A proper fix may come later.)
Upstream changes:
Version 1.64.0 (2022-09-22)
Language
Unions with mutable references or tuples of allowed types are now allowed
It is now considered valid to deallocate memory pointed to by a shared reference
&T
if every byte inT
is inside anUnsafeCell
Unused tuple struct fields are now warned against in an allow-by-default lint, [
unused_tuple_struct_fields
] (rust-lang/rust#95977), similar to the existing warning for unused struct fields. This lint will become warn-by-default in the future.
Compiler
- [Add Nintendo Switch as tier 3 target]
(rust-lang/rust#88991)
- Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support.
- [Only compile
#[used]
as llvm.compiler.used for ELF targets] (rust-lang/rust#93718) - [Add the
--diagnostic-width
compiler flag to define the terminal width.] (rust-lang/rust#95635) - [Add support for link-flavor
rust-lld
for iOS, tvOS and watchOS] (rust-lang/rust#98771)
Libraries
- [Remove restrictions on compare-exchange memory ordering.] (rust-lang/rust#98383)
- You can now
write!
orwriteln!
into anOsString
: Implementfmt::Write
forOsString
- [Make RwLockReadGuard covariant] (rust-lang/rust#96820)
- [Implement
FusedIterator
forstd:🥅:[Into]Incoming
] (rust-lang/rust#97300) - [
impl<T: AsRawFd> AsRawFd for {Arc,Box}<T>
] (rust-lang/rust#97437) - [
ptr::copy
andptr::swap
are doing untyped copies] (rust-lang/rust#97712) - [Add cgroupv1 support to
available_parallelism
] (rust-lang/rust#97925) - [Mitigate many incorrect uses of
mem::uninitialized
] (rust-lang/rust#99182)
Stabilized APIs
- [
future::IntoFuture
] (https://doc.rust-lang.org/stable/std/future/trait.IntoFuture.html) - [
future::poll_fn
] (https://doc.rust-lang.org/stable/std/future/fn.poll_fn.html) - [
task::ready!
] (https://doc.rust-lang.org/stable/std/task/macro.ready.html) - [
num::NonZero*::checked_mul
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_mul) - [
num::NonZero*::checked_pow
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_pow) - [
num::NonZero*::saturating_mul
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.saturating_mul) - [
num::NonZero*::saturating_pow
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.saturating_pow) - [
num::NonZeroI*::abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.abs) - [
num::NonZeroI*::checked_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.checked_abs) - [
num::NonZeroI*::overflowing_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.overflowing_abs) - [
num::NonZeroI*::saturating_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.saturating_abs) - [
num::NonZeroI*::unsigned_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.unsigned_abs) - [
num::NonZeroI*::wrapping_abs
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroIsize.html#method.wrapping_abs) - [
num::NonZeroU*::checked_add
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_add) - [
num::NonZeroU*::checked_next_power_of_two
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.checked_next_power_of_two) - [
num::NonZeroU*::saturating_add
] (https://doc.rust-lang.org/stable/std/num/struct.NonZeroUsize.html#method.saturating_add) - [
os::unix::process::CommandExt::process_group
] (https://doc.rust-lang.org/stable/std/os/unix/process/trait.CommandExt.html#tymethod.process_group) - [
os::windows::fs::FileTypeExt::is_symlink_dir
] (https://doc.rust-lang.org/stable/std/os/windows/fs/trait.FileTypeExt.html#tymethod.is_symlink_dir) - [
os::windows::fs::FileTypeExt::is_symlink_file
] (https://doc.rust-lang.org/stable/std/os/windows/fs/trait.FileTypeExt.html#tymethod.is_symlink_file)
These types were previously stable in std::ffi
, but are now also
available in core
and alloc
:
- [
core::ffi::CStr
] (https://doc.rust-lang.org/stable/core/ffi/struct.CStr.html) - [
core::ffi::FromBytesWithNulError
] (https://doc.rust-lang.org/stable/core/ffi/struct.FromBytesWithNulError.html) - [
alloc::ffi::CString
] (https://doc.rust-lang.org/stable/alloc/ffi/struct.CString.html) - [
alloc::ffi::FromVecWithNulError
] (https://doc.rust-lang.org/stable/alloc/ffi/struct.FromVecWithNulError.html) - [
alloc::ffi::IntoStringError
] (https://doc.rust-lang.org/stable/alloc/ffi/struct.IntoStringError.html) - [
alloc::ffi::NulError
] (https://doc.rust-lang.org/stable/alloc/ffi/struct.NulError.html)
These types were previously stable in std::os::raw
, but are now
also available in core::ffi
and std::ffi
:
- [
ffi::c_char
] (https://doc.rust-lang.org/stable/std/ffi/type.c_char.html) - [
ffi::c_double
] (https://doc.rust-lang.org/stable/std/ffi/type.c_double.html) - [
ffi::c_float
] (https://doc.rust-lang.org/stable/std/ffi/type.c_float.html) - [
ffi::c_int
] (https://doc.rust-lang.org/stable/std/ffi/type.c_int.html) - [
ffi::c_long
] (https://doc.rust-lang.org/stable/std/ffi/type.c_long.html) - [
ffi::c_longlong
] (https://doc.rust-lang.org/stable/std/ffi/type.c_longlong.html) - [
ffi::c_schar
] (https://doc.rust-lang.org/stable/std/ffi/type.c_schar.html) - [
ffi::c_short
] (https://doc.rust-lang.org/stable/std/ffi/type.c_short.html) - [
ffi::c_uchar
] (https://doc.rust-lang.org/stable/std/ffi/type.c_uchar.html) - [
ffi::c_uint
] (https://doc.rust-lang.org/stable/std/ffi/type.c_uint.html) - [
ffi::c_ulong
] (https://doc.rust-lang.org/stable/std/ffi/type.c_ulong.html) - [
ffi::c_ulonglong
] (https://doc.rust-lang.org/stable/std/ffi/type.c_ulonglong.html) - [
ffi::c_ushort
] (https://doc.rust-lang.org/stable/std/ffi/type.c_ushort.html)
These APIs are now usable in const contexts:
- [
slice::from_raw_parts
] (https://doc.rust-lang.org/stable/core/slice/fn.from_raw_parts.html)
Cargo
- [Packages can now inherit settings from the workspace so that
the settings can be centralized in one place.]
(rust-lang/cargo#10859) See
workspace.package
andworkspace.dependencies
for more details on how to define these common settings. - [Cargo commands can now accept multiple
--target
flags to build for multiple targets at once] (rust-lang/cargo#10766), and thebuild.target
config option may now take an array of multiple targets. - [The
--jobs
argument can now take a negative number to count backwards from the max CPUs.] (rust-lang/cargo#10844) - [
cargo add
will now updateCargo.lock
.] (rust-lang/cargo#10902) - Added the
--crate-type
flag tocargo rustc
to override the crate type. - [Significantly improved the performance fetching git dependencies from GitHub
when using a hash in the
rev
field.] (rust-lang/cargo#10079)
Misc
- [The
rust-analyzer
rustup component is now available on the stable channel.] (rust-lang/rust#98640)
Compatibility Notes
- The minimum required versions for all
-linux-gnu
targets are now at least kernel 3.2 and glibc 2.17, for targets that previously supported older versions: Increase the minimum linux-gnu versions - [Network primitives are now implemented with the ideal Rust layout, not the C system layout] (rust-lang/rust#78802). This can cause problems when transmuting the types.
- [Add assertion that
transmute_copy
'sU
is not larger thanT
] (rust-lang/rust#98839) - [A soundness bug in
BTreeMap
was fixed] (rust-lang/rust#99413) that allowed data it was borrowing to be dropped before the container. - [The Drop behavior of C-like enums cast to ints has changed] (rust-lang/rust#96862). These are already discouraged by a compiler warning.
- [Relate late-bound closure lifetimes to parent fn in NLL] (rust-lang/rust#98835)
- [Errors at const-eval time are now in future incompatibility reports] (rust-lang/rust#97743)
- On the
thumbv6m-none-eabi
target, some incorrectasm!
statements were erroneously accepted if they used the high registers (r8 to r14) as an input/output operand. [This is no longer accepted] (rust-lang/rust#99155). - [
impl Trait
was accidentally accepted as the associated type value of return-positionimpl Trait
] (rust-lang/rust#97346), without fulfilling all the trait bounds of that associated type, as long as the hidden type satisfies said bounds. This has been fixed.
Internal Changes
These changes do not affect any public interfaces of Rust, but they represent significant improvements to the performance or internals of rustc and related tools.
- Windows builds now use profile-guided optimization, providing 10-20% improvements to compiler performance: [Utilize PGO for windows x64 rustc dist builds] (rust-lang/rust#96978)
- [Stop keeping metadata in memory before writing it to disk] (rust-lang/rust#96544)
- [compiletest: strip debuginfo by default for mode=ui] (rust-lang/rust#98140)
- Many improvements to generated code for derives, including
performance improvements:
- [Don't use match-destructuring for derived ops on structs.] (rust-lang/rust#98446)
- [Many small deriving cleanups] (rust-lang/rust#98741)
- [More derive output improvements] (rust-lang/rust#98758)
- Clarify deriving code
- [Final derive output improvements] (rust-lang/rust#99046)
- Stop injecting
#[allow(unused_qualifications)]
in generatedderive
implementations - Improve
derive(Debug)
- Bump to clap 3
- fully move dropck to mir
- [Optimize
Vec::insert
for the case whereindex == len
.] (rust-lang/rust#98755) - [Convert rust-analyzer to an in-tree tool] (rust-lang/rust#99603)
RalfJung pushed a commit to RalfJung/rust-analyzer that referenced this pull request
Lower the assume intrinsic to a MIR statement
This makes rust-lang/rust#96862 (comment) easier and will generally allow us to cheaply insert assume intrinsic calls in mir building.
r? rust-lang/wg-mir-opt
RalfJung pushed a commit to RalfJung/rust-analyzer that referenced this pull request
Lower the assume intrinsic to a MIR statement
This makes rust-lang/rust#96862 (comment) easier and will generally allow us to cheaply insert assume intrinsic calls in mir building.
r? rust-lang/wg-mir-opt
Labels
This PR was explicitly merged by bors.
Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Relevant to the compiler team, which will review and decide on the PR/issue.
Relevant to the language team, which will review and decide on the PR/issue.