Remove polymorphization - #133883
Conversation
|
r? compiler-errors |
f70a014 to
2c6e802
Compare
|
Some changes occurred to the CTFE / Miri interpreter cc @rust-lang/miri Some changes occurred to the CTFE machinery cc @rust-lang/wg-const-eval Some changes occurred in compiler/rustc_codegen_gcc Some changes occurred in compiler/rustc_codegen_cranelift cc @bjorn3 |
|
r=me after it's green @bors rollup=never (since it likely has a net-positive perf result, but let's not block this PR on perf.) |
This comment has been minimized.
This comment has been minimized.
|
looks like you've got an unnecessary import for |
2c6e802 to
7337610
Compare
a879158 to
eb4a656
Compare
|
rust-analyzer is developed in its own repository. If possible, consider making this change to rust-lang/rust-analyzer instead. cc @rust-lang/rust-analyzer |
|
@compiler-errors I'm not 100% sure I rebased properly over the change in I also expanded my search a bit and found a few more mentions of polymorphization to delete. Can you take a look? |
|
lgtm, r=me |
|
@bors r=compiler-errors |
|
☔ The latest upstream changes (presumably #133089) made this pull request unmergeable. Please resolve the merge conflicts. |
|
Massively positive results, regressions are small and in stress tests only, marking as triaged. @rustbot label: +perf-regression-triaged |
|
Is it possible to briefly summarize the source of the performance improvements? I'm just curious. |
|
This PR deletes an often-called query and its associated table. I believe most of the improvement is caused by having less nodes in the query dep graph. Even though all those queries are effectively no-ops. (I would call this query overhead) |
|
Was it an oversight that the query was being called despite not doing anything useful? Or was it more complicated than that? |
|
The result of the unused_generic_params query was previously encoded in the crate metadata in case a crate that depends on the local crate uses |
|
I feel like the code perhaps couldve been written to not touch the polymorphization codepaths unless the feature was enabled, though not totally certain given polymorphization's interaction with codegen 🤔 not certain if the unused parameters query couldve been pushed onto the crates that actually needed it (ie the ones build with Zpolymorphize) |
Pkgsrc changes relative to rust184: * patch reorganization to deal with new version of upstream vendored crates, checksum updates. Version 1.85.0 (2025-02-20) ========================== Language -------- - [The 2024 Edition is now stable.] (rust-lang/rust#133349) See [the edition guide] (https://doc.rust-lang.org/nightly/edition-guide/rust-2024/index.html) for more details. - [Stabilize async closures] (rust-lang/rust#132706) See [RFC 3668] (https://rust-lang.github.io/rfcs/3668-async-closures.html) for more details. - [Stabilize `#[diagnostic::do_not_recommend]`] (rust-lang/rust#132056) - [Add `unpredictable_function_pointer_comparisons` lint to warn against function pointer comparisons] (rust-lang/rust#118833) - [Lint on combining `#[no_mangle]` and `#[export_name]` attributes.] (rust-lang/rust#131558) Compiler -------- - [The unstable flag `-Zpolymorphize` has been removed] (rust-lang/rust#133883), see rust-lang/compiler-team#810 for some background. Platform Support ---------------- - [Promote `powerpc64le-unknown-linux-musl` to tier 2 with host tools] (rust-lang/rust#133801) Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support. Libraries --------- - [Panics in the standard library now have a leading `library/` in their path] (rust-lang/rust#132390) - [`std::env::home_dir()` on Windows now ignores the non-standard `$HOME` environment variable] (rust-lang/rust#132515) It will be un-deprecated in a subsequent release. - [Add `AsyncFn*` to the prelude in all editions.] (rust-lang/rust#132611) Stabilized APIs --------------- - [`BuildHasherDefault::new`] (https://doc.rust-lang.org/stable/std/hash/struct.BuildHasherDefault.html#method.new) - [`ptr::fn_addr_eq`] (https://doc.rust-lang.org/std/ptr/fn.fn_addr_eq.html) - [`io::ErrorKind::QuotaExceeded`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.QuotaExceeded) - [`io::ErrorKind::CrossesDevices`] (https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.CrossesDevices) - [`{float}::midpoint`] (https://doc.rust-lang.org/core/primitive.f32.html#method.midpoint) - [Unsigned `{integer}::midpoint`] (https://doc.rust-lang.org/std/primitive.u64.html#method.midpoint) - [`NonZeroU*::midpoint`] (https://doc.rust-lang.org/std/num/type.NonZeroU32.html#method.midpoint) - [impl `std::iter::Extend` for tuples with arity 1 through 12] (https://doc.rust-lang.org/stable/std/iter/trait.Extend.html#impl-Extend%3C(A,)%3E-for-(EA,)) - [`FromIterator<(A, ...)>` for tuples with arity 1 through 12] (https://doc.rust-lang.org/stable/std/iter/trait.FromIterator.html#impl-FromIterator%3C(EA,)%3E-for-(A,)) - [`std::task::Waker::noop`] (https://doc.rust-lang.org/stable/std/task/struct.Waker.html#method.noop) These APIs are now stable in const contexts: - [`mem::size_of_val`] (https://doc.rust-lang.org/stable/std/mem/fn.size_of_val.html) - [`mem::align_of_val`] (https://doc.rust-lang.org/stable/std/mem/fn.align_of_val.html) - [`Layout::for_value`] (https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.for_value) - [`Layout::align_to`] (https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.align_to) - [`Layout::pad_to_align`] (https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.pad_to_align) - [`Layout::extend`] (https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.extend) - [`Layout::array`] (https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.array) - [`std::mem::swap`] (https://doc.rust-lang.org/stable/std/mem/fn.swap.html) - [`std::ptr::swap`] (https://doc.rust-lang.org/stable/std/ptr/fn.swap.html) - [`NonNull::new`] (https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.new) - [`HashMap::with_hasher`] (https://doc.rust-lang.org/stable/std/collections/struct.HashMap.html#method.with_hasher) - [`HashSet::with_hasher`] (https://doc.rust-lang.org/stable/std/collections/struct.HashSet.html#method.with_hasher) - [`BuildHasherDefault::new`] (https://doc.rust-lang.org/stable/std/hash/struct.BuildHasherDefault.html#method.new) - [`<float>::recip`] (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.recip) - [`<float>::to_degrees`] (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.to_degrees) - [`<float>::to_radians`] (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.to_radians) - [`<float>::max`] (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.max) - [`<float>::min`] (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.min) - [`<float>::clamp`] (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.clamp) - [`<float>::abs`] (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.abs) - [`<float>::signum`] (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.signum) - [`<float>::copysign`] (https://doc.rust-lang.org/stable/std/primitive.f32.html#method.copysign) - [`MaybeUninit::write`] (https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.write) Cargo ----- - [Add future-incompatibility warning against keywords in cfgs and add raw-idents] (rust-lang/cargo#14671) - [Stabilize higher precedence trailing flags] (rust-lang/cargo#14900) - [Pass `CARGO_CFG_FEATURE` to build scripts] (rust-lang/cargo#14902) Rustdoc ----- - [Doc comment on impl blocks shows the first line, even when the impl block is collapsed] (rust-lang/rust#132155) Compatibility Notes ------------------- - [`rustc` no longer treats the `test` cfg as a well known check-cfg] (rust-lang/rust#131729), instead it is up to the build systems and users of `--check-cfg`[^check-cfg] to set it as a well known cfg using `--check-cfg=cfg(test)`. This is done to enable build systems like Cargo to set it conditionally, as not all source files are suitable for unit tests. [Cargo (for now) unconditionally sets the `test` cfg as a well known cfg] (rust-lang/cargo#14963). [^check-cfg]: https://doc.rust-lang.org/nightly/rustc/check-cfg.html - [Disable potentially incorrect type inference if there are trivial and non-trivial where-clauses] (rust-lang/rust#132325) - `std::env::home_dir()` has been deprecated for years, because it can give surprising results in some Windows configurations if the `HOME` environment variable is set (which is not the normal configuration on Windows). We had previously avoided changing its behavior, out of concern for compatibility with code depending on this non-standard configuration. Given how long this function has been deprecated, we're now fixing its behavior as a bugfix. A subsequent release will remove the deprecation for this function. - [Make `core::ffi::c_char` signedness more closely match that of the platform-default `char`] (rust-lang/rust#132975) This changed `c_char` from an `i8` to `u8` or vice versa on many Tier 2 and 3 targets (mostly Arm and RISC-V embedded targets). The new definition may result in compilation failures but fixes compatibility issues with C. The `libc` crate matches this change as of its 0.2.169 release. - [When compiling a nested `macro_rules` macro from an external crate, the content of the inner `macro_rules` is now built with the edition of the external crate, not the local crate.] (rust-lang/rust#133274) - [Increase `sparcv9-sun-solaris` and `x86_64-pc-solaris` Solaris baseline to 11.4.] (rust-lang/rust#133293) - [Show `abi_unsupported_vector_types` lint in future breakage reports] (rust-lang/rust#133374) - [Error if multiple super-trait instantiations of `dyn Trait` need associated types to be specified but only one is provided] (rust-lang/rust#133392) - [Change `powerpc64-ibm-aix` default `codemodel` to large] (rust-lang/rust#133811) 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. - [Build `x86_64-unknown-linux-gnu` with LTO for C/C++ code (e.g., `jemalloc`)] (rust-lang/rust#134690)
This MR contains the following updates: | Package | Update | Change | |---|---|---| | [rust](https://github.com/rust-lang/rust) | minor | `1.84.1` -> `1.85.0` | MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot). **Proposed changes to behavior should be submitted there as MRs.** --- ### Release Notes <details> <summary>rust-lang/rust (rust)</summary> ### [`v1.85.0`](https://github.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1850-2025-02-20) [Compare Source](rust-lang/rust@1.84.1...1.85.0) \========================== <a id="1.85.0-Language"></a> ## Language - [The 2024 Edition is now stable.](rust-lang/rust#133349) See [the edition guide](https://doc.rust-lang.org/nightly/edition-guide/rust-2024/index.html) for more details. - [Stabilize async closures](rust-lang/rust#132706) See [RFC 3668](https://rust-lang.github.io/rfcs/3668-async-closures.html) for more details. - [Stabilize `#[diagnostic::do_not_recommend]`](rust-lang/rust#132056) - [Add `unpredictable_function_pointer_comparisons` lint to warn against function pointer comparisons](rust-lang/rust#118833) - [Lint on combining `#[no_mangle]` and `#[export_name]` attributes.](rust-lang/rust#131558) <a id="1.85.0-Compiler"></a> ## Compiler - [The unstable flag `-Zpolymorphize` has been removed](rust-lang/rust#133883), see rust-lang/compiler-team#810 for some background. <a id="1.85.0-Platform-Support"></a> ## Platform Support - [Promote `powerpc64le-unknown-linux-musl` to tier 2 with host tools](rust-lang/rust#133801) Refer to Rust's \[platform support page]\[platform-support-doc] for more information on Rust's tiered platform support. <a id="1.85.0-Libraries"></a> ## Libraries - [Panics in the standard library now have a leading `library/` in their path](rust-lang/rust#132390) - [`std::env::home_dir()` on Windows now ignores the non-standard `$HOME` environment variable](rust-lang/rust#132515) It will be un-deprecated in a subsequent release. - [Add `AsyncFn*` to the prelude in all editions.](rust-lang/rust#132611) <a id="1.85.0-Stabilized-APIs"></a> ## Stabilized APIs - [`BuildHasherDefault::new`](https://doc.rust-lang.org/stable/std/hash/struct.BuildHasherDefault.html#method.new) - [`ptr::fn_addr_eq`](https://doc.rust-lang.org/std/ptr/fn.fn_addr_eq.html) - [`io::ErrorKind::QuotaExceeded`](https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.QuotaExceeded) - [`io::ErrorKind::CrossesDevices`](https://doc.rust-lang.org/stable/std/io/enum.ErrorKind.html#variant.CrossesDevices) - [`{float}::midpoint`](https://doc.rust-lang.org/core/primitive.f32.html#method.midpoint) - [Unsigned `{integer}::midpoint`](https://doc.rust-lang.org/std/primitive.u64.html#method.midpoint) - [`NonZeroU*::midpoint`](https://doc.rust-lang.org/std/num/type.NonZeroU32.html#method.midpoint) - [impl `std::iter::Extend` for tuples with arity 1 through 12](https://doc.rust-lang.org/stable/std/iter/trait.Extend.html#impl-Extend%3C\(A,\)%3E-for-\(EA,\)) - [`FromIterator<(A, ...)>` for tuples with arity 1 through 12](https://doc.rust-lang.org/stable/std/iter/trait.FromIterator.html#impl-FromIterator%3C\(EA,\)%3E-for-\(A,\)) - [`std::task::Waker::noop`](https://doc.rust-lang.org/stable/std/task/struct.Waker.html#method.noop) These APIs are now stable in const contexts: - [`mem::size_of_val`](https://doc.rust-lang.org/stable/std/mem/fn.size_of_val.html) - [`mem::align_of_val`](https://doc.rust-lang.org/stable/std/mem/fn.align_of_val.html) - [`Layout::for_value`](https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.for_value) - [`Layout::align_to`](https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.align_to) - [`Layout::pad_to_align`](https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.pad_to_align) - [`Layout::extend`](https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.extend) - [`Layout::array`](https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.array) - [`std::mem::swap`](https://doc.rust-lang.org/stable/std/mem/fn.swap.html) - [`std::ptr::swap`](https://doc.rust-lang.org/stable/std/ptr/fn.swap.html) - [`NonNull::new`](https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.new) - [`HashMap::with_hasher`](https://doc.rust-lang.org/stable/std/collections/struct.HashMap.html#method.with_hasher) - [`HashSet::with_hasher`](https://doc.rust-lang.org/stable/std/collections/struct.HashSet.html#method.with_hasher) - [`BuildHasherDefault::new`](https://doc.rust-lang.org/stable/std/hash/struct.BuildHasherDefault.html#method.new) - [`<float>::recip`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.recip) - [`<float>::to_degrees`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.to_degrees) - [`<float>::to_radians`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.to_radians) - [`<float>::max`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.max) - [`<float>::min`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.min) - [`<float>::clamp`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.clamp) - [`<float>::abs`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.abs) - [`<float>::signum`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.signum) - [`<float>::copysign`](https://doc.rust-lang.org/stable/std/primitive.f32.html#method.copysign) - [`MaybeUninit::write`](https://doc.rust-lang.org/stable/std/mem/union.MaybeUninit.html#method.write) <a id="1.85.0-Cargo"></a> ## Cargo - [Add future-incompatibility warning against keywords in cfgs and add raw-idents](rust-lang/cargo#14671) - [Stabilize higher precedence trailing flags](rust-lang/cargo#14900) - [Pass `CARGO_CFG_FEATURE` to build scripts](rust-lang/cargo#14902) <a id="1.85.0-Rustdoc"></a> ## Rustdoc - [Doc comment on impl blocks shows the first line, even when the impl block is collapsed](rust-lang/rust#132155) <a id="1.85.0-Compatibility-Notes"></a> ## Compatibility Notes - [`rustc` no longer treats the `test` cfg as a well known check-cfg](rust-lang/rust#131729), instead it is up to the build systems and users of `--check-cfg`\[^check-cfg] to set it as a well known cfg using `--check-cfg=cfg(test)`. This is done to enable build systems like Cargo to set it conditionally, as not all source files are suitable for unit tests. [Cargo (for now) unconditionally sets the `test` cfg as a well known cfg](rust-lang/cargo#14963). \[^check-cfg]: https://doc.rust-lang.org/nightly/rustc/check-cfg.html - [Disable potentially incorrect type inference if there are trivial and non-trivial where-clauses](rust-lang/rust#132325) - `std::env::home_dir()` has been deprecated for years, because it can give surprising results in some Windows configurations if the `HOME` environment variable is set (which is not the normal configuration on Windows). We had previously avoided changing its behavior, out of concern for compatibility with code depending on this non-standard configuration. Given how long this function has been deprecated, we're now fixing its behavior as a bugfix. A subsequent release will remove the deprecation for this function. - [Make `core::ffi::c_char` signedness more closely match that of the platform-default `char`](rust-lang/rust#132975) This changed `c_char` from an `i8` to `u8` or vice versa on many Tier 2 and 3 targets (mostly Arm and RISC-V embedded targets). The new definition may result in compilation failures but fixes compatibility issues with C. The `libc` crate matches this change as of its 0.2.169 release. - [When compiling a nested `macro_rules` macro from an external crate, the content of the inner `macro_rules` is now built with the edition of the external crate, not the local crate.](rust-lang/rust#133274) - [Increase `sparcv9-sun-solaris` and `x86_64-pc-solaris` Solaris baseline to 11.4.](rust-lang/rust#133293) - [Show `abi_unsupported_vector_types` lint in future breakage reports](rust-lang/rust#133374) - [Error if multiple super-trait instantiations of `dyn Trait` need associated types to be specified but only one is provided](rust-lang/rust#133392) - [Change `powerpc64-ibm-aix` default `codemodel` to large](rust-lang/rust#133811) <a id="1.85.0-Internal-Changes"></a> ## 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. - [Build `x86_64-unknown-linux-gnu` with LTO for C/C++ code (e.g., `jemalloc`)](rust-lang/rust#134690) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xODAuMyIsInVwZGF0ZWRJblZlciI6IjM5LjE4MC4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
These types have been unused since polymorphization was removed in <rust-lang#133883>.
Remove unused types `UnusedGenericParams` and `FiniteBitSet` - These types have been unused since polymorphization was removed in <rust-lang#133883>.
Remove unused types `UnusedGenericParams` and `FiniteBitSet` - These types have been unused since polymorphization was removed in <rust-lang#133883>.
Remove unused types `UnusedGenericParams` and `FiniteBitSet` - These types have been unused since polymorphization was removed in <rust-lang/rust#133883>.
These types have been unused since polymorphization was removed in <rust-lang#133883>.
This PR removes the flag
-Zpolymorphizeand all the infrastructure in the compiler that exists only to support it, per rust-lang/compiler-team#810.