[stable] 1.74.1 release
This includes backports of:
* Dispose llvm::TargetMachines prior to llvm::Context being disposed #118464
* clarify fn discriminant guarantees: only free lifetimes may get erased #118006
* Move subtyper below reveal_all and change reveal_all #116415
* Make subtyping explicit in MIR #115025 (needed for above)
As well as infrastructure fix:
* Don't ask for a specific branch in cargotest #118597
r? `@Mark-Simulacrum`
If the TargetMachine is disposed after the Context is disposed, it can
lead to use after frees in some cases.
I've observed this happening occasionally on code compiled for
aarch64-pc-windows-msvc using `-Zstack-protector=strong` but other users
have reported AVs from host aarch64-pc-windows-msvc compilers as well.
Without the workaround applied, this test will produce malformed mappings that
cause `llvm-cov` to fail.
(And if it does emit well-formed mappings, they should be obviously incorrect.)
This method is trying to detect macro invocations, so that it can split a span
into two parts just after the `!` of the invocation.
Under some circumstances (probably involving nested macros), it gets confused
and produces a span that is larger than the original span, and possibly extends
outside its enclosing function and even into an adjacent file.
In extreme cases, that can result in malformed coverage mappings that cause
`llvm-cov` to fail. For now, we at least want to detect these egregious cases
and avoid them, so that coverage reports can still be produced.
[beta] backports
- dropck_outlives check whether generator witness needs_drop #117134
- Make sure that predicates with unmentioned bound vars are still considered global in the old solver #117589
- Check binders with bound vars for global bounds that don't hold #117637
- generator layout: ignore fake borrows #117712
r? ghost
Move `needless_pass_by_ref_mut`: `suspicious` -> `nursery`
[Related to [this Zulip thread](https://rust-lang.zulipchat.com/#narrow/stream/257328-clippy/topic/needless_pass_by_ref_mut.20isn't.20ready.20for.20stable)]
`needless_pass_by_ref_mut` has been released with some important bugs (notably having a lot of reported false positives and an ICE). So it may not be really ready for being in stable until these problems are solved. This PR changes the lint's category from `suspicious` to `nursery`, just that.
changelog: none
[beta] backports
- ensure the parent path's existence on `x install` #116349
- Remove `cfg_match` from the prelude #117162
- improve and fix `x install` #117383
- Update to LLVM 17.0.4 #117436
r? cuviper
Fix: Write access check of `prefix` and `sysconfdir`
when DESTDIR is present.
Improvement: Instead of repeatedly reading `DESTDIR` within
each `fn prepare_dir` usage, read it once and pass it to
the `fn prepare_dir`.
Signed-off-by: onur-ozkan <work@onurozkan.dev>
(cherry picked from commit 4b14048d60)
[beta] backports and stage0 bump
- Bump stage0 to released stable compiler
- Hide host effect params from docs #116670
- Fix a performance regression in obligation deduplication. #116826
- Make `#[repr(Rust)]` and `#[repr(C)]` incompatible with one another #116829
- Update to LLVM 17.0.3 #116840
- Disable effects in libcore again #116856
- revert rust-lang/rust#114586#116879
r? cuviper
Commit 8378487 from #114611 changed the location of an obligation
deduplication step in `opt_normalize_projection_type`. This meant that
deduplication stopped happening on one path where it was still
necessary, causing a couple of drastic performance regressions.
This commit moves the deduplication back to the old location. The good
news is that #114611 had four commits and 8378487 was of minimal
importance, so the perf benefits from that PR remain.
Fixes#116780, #116797.
(cherry picked from commit 91f2fbc867)