Skip to content

Commit 63154b7

Browse files
committed
Auto merge of #154316 - JonathanBrouwer:rollup-qSafo91, r=JonathanBrouwer
Rollup of 6 pull requests Successful merges: - #154094 (add neon load/store assembly test) - #154142 (Delegation: eliminate usage of AST from generics creation) - #154276 (allow `incomplete_features` in more tests) - #154284 (doc: linker-plugin-based LTO: update list of good combinations) - #154286 (Cherry-pick 1.94.1 release notes) - #154303 (Remove more `BuiltinLintDiag` variants - part 2)
2 parents 0312931 + a532706 commit 63154b7

146 files changed

Lines changed: 670 additions & 1460 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

RELEASES.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
Version 1.94.1 (2026-03-26)
2+
===========================
3+
4+
<a id="1.94.1"></a>
5+
6+
* [Fix `std::thread::spawn` on wasm32-wasip1-threads](https://github.com/rust-lang/rust/pull/153634)
7+
* [Remove new methods added to `std::os::windows::fs::OpenOptionsExt`](https://github.com/rust-lang/rust/pull/153491)
8+
The new methods were unstable, but the trait itself is not sealed and so
9+
cannot be extended with non-default methods.
10+
* [Clippy: fix ICE in `match_same_arms`](https://github.com/rust-lang/rust-clippy/pull/16685)
11+
* [Cargo: update tar to 0.4.45](https://github.com/rust-lang/cargo/pull/16769)
12+
This resolves CVE-2026-33055 and CVE-2026-33056. Users of crates.io are not affected.
13+
See [blog](https://blog.rust-lang.org/2026/03/21/cve-2026-33056/) for more details.
14+
115
Version 1.94.0 (2026-03-05)
216
==========================
317

compiler/rustc_ast_lowering/src/delegation.rs

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -146,12 +146,10 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
146146

147147
let (param_count, c_variadic) = self.param_count(sig_id);
148148

149-
let mut generics =
150-
self.lower_delegation_generics(delegation, sig_id, item_id, span);
149+
let mut generics = self.uplift_delegation_generics(delegation, sig_id, item_id);
151150

152151
let body_id = self.lower_delegation_body(
153152
delegation,
154-
item_id,
155153
is_method,
156154
param_count,
157155
&mut generics,
@@ -166,10 +164,8 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
166164

167165
let generics = self.arena.alloc(hir::Generics {
168166
has_where_clause_predicates: false,
169-
params: self.arena.alloc_from_iter(generics.all_params(item_id, span, self)),
170-
predicates: self
171-
.arena
172-
.alloc_from_iter(generics.all_predicates(item_id, span, self)),
167+
params: self.arena.alloc_from_iter(generics.all_params(span, self)),
168+
predicates: self.arena.alloc_from_iter(generics.all_predicates(span, self)),
173169
span,
174170
where_clause_span: span,
175171
});
@@ -294,19 +290,22 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
294290
let decl_param_count = param_count - c_variadic as usize;
295291
let inputs = self.arena.alloc_from_iter((0..decl_param_count).map(|arg| hir::Ty {
296292
hir_id: self.next_id(),
297-
kind: hir::TyKind::InferDelegation(sig_id, hir::InferDelegationKind::Input(arg)),
293+
kind: hir::TyKind::InferDelegation(hir::InferDelegation::Sig(
294+
sig_id,
295+
hir::InferDelegationSig::Input(arg),
296+
)),
298297
span,
299298
}));
300299

301300
let output = self.arena.alloc(hir::Ty {
302301
hir_id: self.next_id(),
303-
kind: hir::TyKind::InferDelegation(
302+
kind: hir::TyKind::InferDelegation(hir::InferDelegation::Sig(
304303
sig_id,
305-
hir::InferDelegationKind::Output(self.arena.alloc(hir::DelegationGenerics {
304+
hir::InferDelegationSig::Output(self.arena.alloc(hir::DelegationGenerics {
306305
child_args_segment_id: generics.child.args_segment_id,
307306
parent_args_segment_id: generics.parent.args_segment_id,
308307
})),
309-
),
308+
)),
310309
span,
311310
});
312311

@@ -399,7 +398,6 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
399398
fn lower_delegation_body(
400399
&mut self,
401400
delegation: &Delegation,
402-
item_id: NodeId,
403401
is_method: bool,
404402
param_count: usize,
405403
generics: &mut GenericsGenerationResults<'hir>,
@@ -434,7 +432,7 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
434432
args.push(arg);
435433
}
436434

437-
let final_expr = this.finalize_body_lowering(delegation, item_id, args, generics, span);
435+
let final_expr = this.finalize_body_lowering(delegation, args, generics, span);
438436

439437
(this.arena.alloc_from_iter(parameters), final_expr)
440438
})
@@ -471,7 +469,6 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
471469
fn finalize_body_lowering(
472470
&mut self,
473471
delegation: &Delegation,
474-
item_id: NodeId,
475472
args: Vec<hir::Expr<'hir>>,
476473
generics: &mut GenericsGenerationResults<'hir>,
477474
span: Span,
@@ -501,7 +498,7 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
501498

502499
// FIXME(fn_delegation): proper support for parent generics propagation
503500
// in method call scenario.
504-
let segment = self.process_segment(item_id, span, &segment, &mut generics.child, false);
501+
let segment = self.process_segment(span, &segment, &mut generics.child, false);
505502
let segment = self.arena.alloc(segment);
506503

507504
self.arena.alloc(hir::Expr {
@@ -528,7 +525,7 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
528525
new_path.segments = self.arena.alloc_from_iter(
529526
new_path.segments.iter().enumerate().map(|(idx, segment)| {
530527
let mut process_segment = |result, add_lifetimes| {
531-
self.process_segment(item_id, span, segment, result, add_lifetimes)
528+
self.process_segment(span, segment, result, add_lifetimes)
532529
};
533530

534531
if idx + 2 == len {
@@ -544,8 +541,7 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
544541
hir::QPath::Resolved(ty, self.arena.alloc(new_path))
545542
}
546543
hir::QPath::TypeRelative(ty, segment) => {
547-
let segment =
548-
self.process_segment(item_id, span, segment, &mut generics.child, false);
544+
let segment = self.process_segment(span, segment, &mut generics.child, false);
549545

550546
hir::QPath::TypeRelative(ty, self.arena.alloc(segment))
551547
}
@@ -569,23 +565,21 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
569565

570566
fn process_segment(
571567
&mut self,
572-
item_id: NodeId,
573568
span: Span,
574569
segment: &hir::PathSegment<'hir>,
575570
result: &mut GenericsGenerationResult<'hir>,
576571
add_lifetimes: bool,
577572
) -> hir::PathSegment<'hir> {
578573
let details = result.generics.args_propagation_details();
579574

580-
// The first condition is needed when there is SelfAndUserSpecified case,
581-
// we don't want to propagate generics params in this situation.
582-
let segment = if details.should_propagate
583-
&& let Some(args) = result
584-
.generics
585-
.into_hir_generics(self, item_id, span)
586-
.into_generic_args(self, add_lifetimes, span)
587-
{
588-
hir::PathSegment { args: Some(args), ..segment.clone() }
575+
let segment = if details.should_propagate {
576+
let generics = result.generics.into_hir_generics(self, span);
577+
let args = generics.into_generic_args(self, add_lifetimes, span);
578+
579+
// Needed for better error messages (`trait-impl-wrong-args-count.rs` test).
580+
let args = if args.is_empty() { None } else { Some(args) };
581+
582+
hir::PathSegment { args, ..segment.clone() }
589583
} else {
590584
segment.clone()
591585
};

0 commit comments

Comments
 (0)