Skip to content

Commit cb70c56

Browse files
committed
Auto merge of rust-lang#139216 - matthiaskrgr:rollup-sjrt0fl, r=matthiaskrgr
Rollup of 9 pull requests Successful merges: - rust-lang#110406 (rustdoc-json: Add test for #[automatically_derived] attribute) - rust-lang#138790 (Note potential but private items in show_candidates) - rust-lang#138950 (replace extra_filename with strict version hash in metrics file names) - rust-lang#139002 (Add release notes for 1.86.0) - rust-lang#139022 (increment depth of nested obligations) - rust-lang#139129 (Add tests for slice bounds check optimization) - rust-lang#139188 (PassWrapper: adapt for llvm/llvm-project@94122d58fc77079a291a3d008914…) - rust-lang#139193 (Feed HIR for by-move coroutine body def, since the inliner tries to read its attrs) - rust-lang#139202 (Improve docs of ValTreeKind) r? `@ghost` `@rustbot` modify labels: rollup
2 parents 0b4a81a + dba6300 commit cb70c56

38 files changed

+425
-113
lines changed

RELEASES.md

+123
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,126 @@
1+
Version 1.86.0 (2025-04-03)
2+
==========================
3+
4+
<a id="1.86.0-Language"></a>
5+
6+
Language
7+
--------
8+
- [Stabilize upcasting trait objects to supertraits.](https://github.com/rust-lang/rust/pull/134367)
9+
- [Allow safe functions to be marked with the `#[target_feature]` attribute.](https://github.com/rust-lang/rust/pull/134090)
10+
- [The `missing_abi` lint now warns-by-default.](https://github.com/rust-lang/rust/pull/132397)
11+
- Rust now lints about double negations, to catch cases that might have intended to be a prefix decrement operator (`--x`) as written in other languages. This was previously a clippy lint, `clippy::double_neg`, and is [now available directly in Rust as `double_negations`.](https://github.com/rust-lang/rust/pull/126604)
12+
- [More pointers are now detected as definitely not-null based on their alignment in const eval.](https://github.com/rust-lang/rust/pull/133700)
13+
- [Empty `repr()` attribute applied to invalid items are now correctly rejected.](https://github.com/rust-lang/rust/pull/133925)
14+
- [Inner attributes `#![test]` and `#![rustfmt::skip]` are no longer accepted in more places than intended.](https://github.com/rust-lang/rust/pull/134276)
15+
16+
<a id="1.86.0-Compiler"></a>
17+
18+
Compiler
19+
--------
20+
- [Debug-assert that raw pointers are non-null on access.](https://github.com/rust-lang/rust/pull/134424)
21+
- [Change `-O` to mean `-C opt-level=3` instead of `-C opt-level=2` to match Cargo's defaults.](https://github.com/rust-lang/rust/pull/135439)
22+
- [Fix emission of `overflowing_literals` under certain macro environments.](https://github.com/rust-lang/rust/pull/136393)
23+
24+
<a id="1.86.0-Platform-Support"></a>
25+
26+
Platform Support
27+
----------------
28+
- [Replace `i686-unknown-redox` target with `i586-unknown-redox`.](https://github.com/rust-lang/rust/pull/136698)
29+
- [Increase baseline CPU of `i686-unknown-hurd-gnu` to Pentium 4.](https://github.com/rust-lang/rust/pull/136700)
30+
- New tier 3 targets:
31+
- [`{aarch64-unknown,x86_64-pc}-nto-qnx710_iosock`](https://github.com/rust-lang/rust/pull/133631).
32+
For supporting Neutrino QNX 7.1 with `io-socket` network stack.
33+
- [`{aarch64-unknown,x86_64-pc}-nto-qnx800`](https://github.com/rust-lang/rust/pull/133631).
34+
For supporting Neutrino QNX 8.0 (`no_std`-only).
35+
- [`{x86_64,i686}-win7-windows-gnu`](https://github.com/rust-lang/rust/pull/134609).
36+
Intended for backwards compatibility with Windows 7. `{x86_64,i686}-win7-windows-msvc` are the Windows MSVC counterparts that already exist as Tier 3 targets.
37+
- [`amdgcn-amd-amdhsa`](https://github.com/rust-lang/rust/pull/134740).
38+
- [`x86_64-pc-cygwin`](https://github.com/rust-lang/rust/pull/134999).
39+
- [`{mips,mipsel}-mti-none-elf`](https://github.com/rust-lang/rust/pull/135074).
40+
Initial bare-metal support.
41+
- [`m68k-unknown-none-elf`](https://github.com/rust-lang/rust/pull/135085).
42+
- [`armv7a-nuttx-{eabi,eabihf}`, `aarch64-unknown-nuttx`, and `thumbv7a-nuttx-{eabi,eabihf}`](https://github.com/rust-lang/rust/pull/135757).
43+
44+
Refer to Rust's [platform support page][platform-support-doc]
45+
for more information on Rust's tiered platform support.
46+
47+
<a id="1.86.0-Libraries"></a>
48+
49+
Libraries
50+
---------
51+
- The type of `FromBytesWithNulError` in `CStr::from_bytes_with_nul(bytes: &[u8]) -> Result<&Self, FromBytesWithNulError>` was [changed from an opaque struct to an enum](https://github.com/rust-lang/rust/pull/134143), allowing users to examine why the conversion failed.
52+
- [Remove `RustcDecodable` and `RustcEncodable`.](https://github.com/rust-lang/rust/pull/134272)
53+
- [Deprecate libtest's `--logfile` option.](https://github.com/rust-lang/rust/pull/134283)
54+
- [On recent versions of Windows, `std::fs::remove_file` will now remove read-only files.](https://github.com/rust-lang/rust/pull/134679)
55+
56+
<a id="1.86.0-Stabilized-APIs"></a>
57+
58+
Stabilized APIs
59+
---------------
60+
61+
- [`{float}::next_down`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_down)
62+
- [`{float}::next_up`](https://doc.rust-lang.org/stable/std/primitive.f64.html#method.next_up)
63+
- [`<[_]>::get_disjoint_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_mut)
64+
- [`<[_]>::get_disjoint_unchecked_mut`](https://doc.rust-lang.org/stable/std/primitive.slice.html#method.get_disjoint_unchecked_mut)
65+
- [`slice::GetDisjointMutError`](https://doc.rust-lang.org/stable/std/slice/enum.GetDisjointMutError.html)
66+
- [`HashMap::get_disjoint_mut`](https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_mut)
67+
- [`HashMap::get_disjoint_unchecked_mut`](https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#method.get_disjoint_unchecked_mut)
68+
- [`NonZero::count_ones`](https://doc.rust-lang.org/stable/std/num/struct.NonZero.html#method.count_ones)
69+
- [`Vec::pop_if`](https://doc.rust-lang.org/std/vec/struct.Vec.html#method.pop_if)
70+
- [`sync::Once::wait`](https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait)
71+
- [`sync::Once::wait_force`](https://doc.rust-lang.org/stable/std/sync/struct.Once.html#method.wait_force)
72+
- [`sync::OnceLock::wait`](https://doc.rust-lang.org/stable/std/sync/struct.OnceLock.html#method.wait)
73+
74+
These APIs are now stable in const contexts:
75+
76+
- [`hint::black_box`](https://doc.rust-lang.org/stable/std/hint/fn.black_box.html)
77+
- [`io::Cursor::get_mut`](https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.get_mut)
78+
- [`io::Cursor::set_position`](https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.set_position)
79+
- [`str::is_char_boundary`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.is_char_boundary)
80+
- [`str::split_at`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at)
81+
- [`str::split_at_checked`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_checked)
82+
- [`str::split_at_mut`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut)
83+
- [`str::split_at_mut_checked`](https://doc.rust-lang.org/stable/std/primitive.str.html#method.split_at_mut_checked)
84+
85+
<a id="1.86.0-Cargo"></a>
86+
87+
Cargo
88+
-----
89+
- [When merging, replace rather than combine configuration keys that refer to a program path and its arguments.](https://github.com/rust-lang/cargo/pull/15066/)
90+
- [Error if both `--package` and `--workspace` are passed but the requested package is missing.](https://github.com/rust-lang/cargo/pull/15071/) This was previously silently ignored, which was considered a bug since missing packages should be reported.
91+
- [Deprecate the token argument in `cargo login` to avoid shell history leaks.](https://github.com/rust-lang/cargo/pull/15057/)
92+
- [Simplify the implementation of `SourceID` comparisons.](https://github.com/rust-lang/cargo/pull/14980/) This may potentially change behavior if the canonicalized URL compares differently in alternative registries.
93+
94+
<a id="1.86.0-Rustdoc"></a>
95+
96+
Rustdoc
97+
-----
98+
- [Add a sans-serif font setting.](https://github.com/rust-lang/rust/pull/133636)
99+
100+
<a id="1.86.0-Compatibility-Notes"></a>
101+
102+
Compatibility Notes
103+
-------------------
104+
- [The `wasm_c_abi` future compatibility warning is now a hard error.](https://github.com/rust-lang/rust/pull/133951)
105+
Users of `wasm-bindgen` should upgrade to at least version 0.2.89, otherwise compilation will fail.
106+
- [Remove long-deprecated no-op attributes `#![no_start]` and `#![crate_id]`.](https://github.com/rust-lang/rust/pull/134300)
107+
- [The future incompatibility lint `cenum_impl_drop_cast` has been made into a hard error.](https://github.com/rust-lang/rust/pull/135964) This means it is now an error to cast a field-less enum to an integer if the enum implements `Drop`.
108+
- [SSE2 is now required for "i686" 32-bit x86 hard-float targets; disabling it causes a warning that will become a hard error eventually.](https://github.com/rust-lang/rust/pull/137037)
109+
To compile for pre-SSE2 32-bit x86, use a "i586" target instead.
110+
111+
<a id="1.86.0-Internal-Changes"></a>
112+
113+
Internal Changes
114+
----------------
115+
116+
These changes do not affect any public interfaces of Rust, but they represent
117+
significant improvements to the performance or internals of rustc and related
118+
tools.
119+
120+
- [Build the rustc on AArch64 Linux with ThinLTO + PGO.](https://github.com/rust-lang/rust/pull/133807)
121+
The ARM 64-bit compiler (AArch64) on Linux is now optimized with ThinLTO and PGO, similar to the optimizations we have already performed for the x86-64 compiler on Linux. This should make it up to 30% faster.
122+
123+
1124
Version 1.85.1 (2025-03-18)
2125
==========================
3126

compiler/rustc_driver_impl/src/lib.rs

+5-8
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ use rustc_session::lint::{Lint, LintId};
6464
use rustc_session::output::{CRATE_TYPES, collect_crate_types, invalid_output_for_target};
6565
use rustc_session::{EarlyDiagCtxt, Session, config, filesearch};
6666
use rustc_span::FileName;
67+
use rustc_span::def_id::LOCAL_CRATE;
6768
use rustc_target::json::ToJson;
6869
use rustc_target::spec::{Target, TargetTuple};
6970
use time::OffsetDateTime;
@@ -392,14 +393,10 @@ pub fn run_compiler(at_args: &[String], callbacks: &mut (dyn Callbacks + Send))
392393
}
393394

394395
fn dump_feature_usage_metrics(tcxt: TyCtxt<'_>, metrics_dir: &Path) {
395-
let output_filenames = tcxt.output_filenames(());
396-
let mut metrics_file_name = std::ffi::OsString::from("unstable_feature_usage_metrics-");
397-
let mut metrics_path = output_filenames.with_directory_and_extension(metrics_dir, "json");
398-
let metrics_file_stem =
399-
metrics_path.file_name().expect("there should be a valid default output filename");
400-
metrics_file_name.push(metrics_file_stem);
401-
metrics_path.pop();
402-
metrics_path.push(metrics_file_name);
396+
let hash = tcxt.crate_hash(LOCAL_CRATE);
397+
let crate_name = tcxt.crate_name(LOCAL_CRATE);
398+
let metrics_file_name = format!("unstable_feature_usage_metrics-{crate_name}-{hash}.json");
399+
let metrics_path = metrics_dir.join(metrics_file_name);
403400
if let Err(error) = tcxt.features().dump_feature_usage_metrics(metrics_path) {
404401
// FIXME(yaahc): once metrics can be enabled by default we will want "failure to emit
405402
// default metrics" to only produce a warning when metrics are enabled by default and emit

compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp

+9-4
Original file line numberDiff line numberDiff line change
@@ -855,10 +855,15 @@ extern "C" LLVMRustResult LLVMRustOptimize(
855855
}
856856

857857
if (LintIR) {
858-
PipelineStartEPCallbacks.push_back(
859-
[](ModulePassManager &MPM, OptimizationLevel Level) {
860-
MPM.addPass(createModuleToFunctionPassAdaptor(LintPass()));
861-
});
858+
PipelineStartEPCallbacks.push_back([](ModulePassManager &MPM,
859+
OptimizationLevel Level) {
860+
#if LLVM_VERSION_GE(21, 0)
861+
MPM.addPass(
862+
createModuleToFunctionPassAdaptor(LintPass(/*AbortOnError=*/true)));
863+
#else
864+
MPM.addPass(createModuleToFunctionPassAdaptor(LintPass()));
865+
#endif
866+
});
862867
}
863868

864869
if (InstrumentCoverage) {

compiler/rustc_middle/src/ty/consts/valtree.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ pub enum ValTreeKind<'tcx> {
3333
/// The fields of any kind of aggregate. Structs, tuples and arrays are represented by
3434
/// listing their fields' values in order.
3535
///
36-
/// Enums are represented by storing their discriminant as a field, followed by all
36+
/// Enums are represented by storing their variant index as a u32 field, followed by all
3737
/// the fields of the variant.
3838
///
3939
/// ZST types are represented as an empty slice.

compiler/rustc_mir_transform/src/coroutine/by_move_body.rs

+2
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,8 @@ pub(crate) fn coroutine_by_move_body_def_id<'tcx>(
219219
mir::MirSource::from_instance(InstanceKind::Item(body_def.def_id().to_def_id()));
220220
dump_mir(tcx, false, "built", &"after", &by_move_body, |_, _| Ok(()));
221221

222+
// Feed HIR because we try to access this body's attrs in the inliner.
223+
body_def.feed_hir();
222224
// Inherited from the by-ref coroutine.
223225
body_def.codegen_fn_attrs(tcx.codegen_fn_attrs(coroutine_def_id).clone());
224226
body_def.coverage_attr_on(tcx.coverage_attr_on(coroutine_def_id));

compiler/rustc_resolve/src/diagnostics.rs

+11-11
Original file line numberDiff line numberDiff line change
@@ -1325,11 +1325,6 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
13251325
})
13261326
}
13271327

1328-
// If only some candidates are accessible, take just them
1329-
if !candidates.iter().all(|v: &ImportSuggestion| !v.accessible) {
1330-
candidates.retain(|x| x.accessible)
1331-
}
1332-
13331328
candidates
13341329
}
13351330

@@ -1793,7 +1788,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
17931788
&import_suggestions,
17941789
Instead::Yes,
17951790
FoundUse::Yes,
1796-
DiagMode::Import { append: single_nested },
1791+
DiagMode::Import { append: single_nested, unresolved_import: false },
17971792
vec![],
17981793
"",
17991794
);
@@ -2750,6 +2745,8 @@ pub(crate) enum DiagMode {
27502745
Pattern,
27512746
/// The binding is part of a use statement
27522747
Import {
2748+
/// `true` means diagnostics is for unresolved import
2749+
unresolved_import: bool,
27532750
/// `true` mean add the tips afterward for case `use a::{b,c}`,
27542751
/// rather than replacing within.
27552752
append: bool,
@@ -2800,6 +2797,7 @@ fn show_candidates(
28002797
return false;
28012798
}
28022799

2800+
let mut showed = false;
28032801
let mut accessible_path_strings: Vec<PathString<'_>> = Vec::new();
28042802
let mut inaccessible_path_strings: Vec<PathString<'_>> = Vec::new();
28052803

@@ -2958,8 +2956,11 @@ fn show_candidates(
29582956
append_candidates(&mut msg, accessible_path_strings);
29592957
err.help(msg);
29602958
}
2961-
true
2962-
} else if !(inaccessible_path_strings.is_empty() || matches!(mode, DiagMode::Import { .. })) {
2959+
showed = true;
2960+
}
2961+
if !inaccessible_path_strings.is_empty()
2962+
&& (!matches!(mode, DiagMode::Import { unresolved_import: false, .. }))
2963+
{
29632964
let prefix =
29642965
if let DiagMode::Pattern = mode { "you might have meant to match on " } else { "" };
29652966
if let [(name, descr, source_span, note, _)] = &inaccessible_path_strings[..] {
@@ -3022,10 +3023,9 @@ fn show_candidates(
30223023

30233024
err.span_note(multi_span, msg);
30243025
}
3025-
true
3026-
} else {
3027-
false
3026+
showed = true;
30283027
}
3028+
showed
30293029
}
30303030

30313031
#[derive(Debug)]

compiler/rustc_resolve/src/imports.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -734,7 +734,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
734734
&mut diag,
735735
Some(err.span),
736736
candidates,
737-
DiagMode::Import { append: false },
737+
DiagMode::Import { append: false, unresolved_import: true },
738738
(source != target)
739739
.then(|| format!(" as {target}"))
740740
.as_deref()

compiler/rustc_trait_selection/src/traits/effects.rs

-8
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,6 @@ fn match_candidate<'tcx>(
106106

107107
more_nested(selcx, &mut nested);
108108

109-
for nested in &mut nested {
110-
nested.set_depth_from_parent(obligation.recursion_depth);
111-
}
112-
113109
Ok(nested)
114110
}
115111

@@ -378,10 +374,6 @@ fn evaluate_host_effect_from_selection_candiate<'tcx>(
378374
}),
379375
);
380376

381-
for nested in &mut nested {
382-
nested.set_depth_from_parent(obligation.recursion_depth);
383-
}
384-
385377
Ok(nested)
386378
}
387379
_ => Err(EvaluationFailure::NoSolution),

0 commit comments

Comments
 (0)