[stable] 1.53.0 release - backport
This hopefully fixes a Clippy ICE on rustc std and the crates.io codebase (and potentially
others).
r? `@Mark-Simulacrum`
[stable] 1.53.0 release
This includes a backport of:
* Revert "implement TrustedRandomAccess for Take iterator adapter" #85975
And includes patches to:
* Update release notes to reflect #85541
* Require RUSTC_FORCE_INCREMENTAL to truly enable incremental, fixing #86004
* This reverts alignment-related commits to address issue #85713 on beta.
r? `@Mark-Simulacrum`
This won't enable incremental if -Cincremental is not already passed, but is
seemingly necessary in the presence of -Zincremental-verify-ich which does not
check for incremental being enabled before accessing incremental data
structures, leading to an ICE.
This disables incremental (i.e., -Cincremental) taking effect unless an
environment variable, RUSTC_FORCE_INCREMENTAL, is set to 1 in the environment of
the running rustc. Currently incremental causes errors for many users, and we do
not have an expectation of being able to quickly fix these errors in a
backportable way - so, for now, disable incremental entirely. The user can still
opt-in, but this way the majority of users merely get slower builds, not broken
builds.
Fixes#85197
We already preserved the `SyntaxContext` for invalid/dummy spans in the
incremental cache, but we weren't doing the same for crate metadata.
If an invalid (lo/hi from different files) span is written to the
incremental cache, we will decode it with a 'dummy' location, but keep
the original `SyntaxContext`. Since the crate metadata encoder was only
checking for `DUMMY_SP` (dummy location + root `SyntaxContext`),
the metadata encoder would treat it as a normal span, encoding the
`SyntaxContext`. As a result, the final span encoded to the metadata
would change across sessions, even if the crate itself was unchanged.
This PR updates our encoding of spans in the crate metadata to mirror
the encoding of spans into the incremental cache. We now always encode a
`SyntaxContext`, and encode location information for spans with a
non-dummy location.
Fixes#85432
When processing a `#[derive]` or `#[cfg_eval]` attribute, we need to
re-parse our attribute target, which requires flattenting all
`Nonterminals`. However, this caused us to incorrectly gate on a
(flattented) nonterminal in a key-value attribute, which is supposed to
be allowed.
Since we already perform this gating during the initial parse, we
suppress it in `capture_cfg` mode.
This addresses a codegen-issue that needs to be fixed upstream in LLVM.
While we wait for the fix, we can disable it.
Verified manually that the outliner is no longer run when
`-Copt-level=z` is specified, and also that you can override this with
`-Cllvm-args=-enable-machine-outliner` if you need it anyway.
A regression test is not really feasible in this instance, given that we
do not have any minimal reproducers.
Fixes#85351
Test was added in PR #84404.
The intent here is: The `copy`/`copy_overlapping` intrinsics are going through
some flip-flopping now of "are they intrinsics or not". We can achieve the same
effect that the test intended by using `likely`/`unlikely`.
[beta] Disable mutable noalias for Rust 1.53
Disable mutable noalias for the upcoming release to give this change more time to bake. I believe that was the consensus, and I wanted to make sure we don't forget :)
r? `@Mark-Simulacrum`
[beta] Backport #84894 to fix beta CI
Currently, beta backports fail with this failure: https://github.com/rust-lang/rust/pull/86036#issuecomment-855318336
```
STL1000: Unexpected compiler version, expected Clang 11.0.0 or newer.
```
The previous beta backport was successful because it uses a Visual Studio tool v14.28.29910 but now CI uses v14.29.30037.
#84894 updated clang to 12 so master didn't catch this change, I guess. Hopefully, it fixes CI failures on beta.
Currently, we have LLVM tarballs for win64, generated by someone running
the installer via wine and tarring up the result.
7z knows how to extract NSIS installers directly, and the result is
identical to our tarball, except that it doesn't include `Uninstall.exe`
(which we don't care about) and it includes the NSIS plugin directory
(which we also don't care about).
This simplifies the process of upgrading CI, and allows us to just
mirror the upstream release .exe directly. This also improves our
supply chain.
Apply suggestions from code review:
1. (removing confusing comment from my test, since the comment reflects the bad undesirable behavior that is being fixed here.)
2. test THIR unsafeck too.
Co-authored-by: Léo Lanteri Thauvin <leseulartichaut@gmail.com>
[beta] backports
* Backport 1.52.1 release notes #85404
* remove InPlaceIterable marker from Peekable due to unsoundness #85340
* rustdoc: Call initSidebarItems in root module of crate #85304
* Update LLVM submodule #85236
* Do not ICE on invalid const param #84913
* Disallows #![feature(no_coverage)] on stable and beta (using standard crate-level gating) #84871
* Ensure TLS destructors run before thread joins in SGX #84409
using allow_internal_unstable (as recommended)
Fixes: #84836
```shell
$ ./build/x86_64-unknown-linux-gnu/stage1/bin/rustc src/test/run-make-fulldeps/coverage/no_cov_crate.rs
error[E0554]: `#![feature]` may not be used on the dev release channel
--> src/test/run-make-fulldeps/coverage/no_cov_crate.rs:2:1
|
2 | #![feature(no_coverage)]
| ^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
For more information about this error, try `rustc --explain E0554`.
```
When encountering a path that can't have generics, do not call
`generics_of`. This would happen when writing something like
`path::this_is_a_mod<const_val>`.
Fix#84831.
This also checks the contents and not only the capacity in case IntoIter's clone implementation is changed to add capacity at the end. Extra capacity at the beginning would be needed to make InPlaceIterable work.
Co-authored-by: Giacomo Stevanato <giaco.stevanato@gmail.com>