Skip to content

Commit cb473c2

Browse files
committed
Auto merge of #83424 - cjgillot:noparam, r=lcnr
GenericParam does not need to be a HIR owner. The special case is not required. Universal impl traits design to regular generic parameters, and their content is owned by the enclosing item. Existential (and opaque) impl traits generate their own enclosing item, and are collected through it.
2 parents 6e17a5c + 4c0b7ac commit cb473c2

File tree

4 files changed

+6
-54
lines changed

4 files changed

+6
-54
lines changed

compiler/rustc_ast_lowering/src/lib.rs

+4-12
Original file line numberDiff line numberDiff line change
@@ -520,10 +520,6 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
520520
}
521521
self.visit_fn_ret_ty(&f.decl.output)
522522
}
523-
TyKind::ImplTrait(def_node_id, _) => {
524-
self.lctx.allocate_hir_id_counter(def_node_id);
525-
visit::walk_ty(self, t);
526-
}
527523
_ => visit::walk_ty(self, t),
528524
}
529525
}
@@ -1431,14 +1427,10 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
14311427
// Add a definition for the in-band `Param`.
14321428
let def_id = self.resolver.local_def_id(def_node_id);
14331429

1434-
self.allocate_hir_id_counter(def_node_id);
1435-
1436-
let hir_bounds = self.with_hir_id_owner(def_node_id, |this| {
1437-
this.lower_param_bounds(
1438-
bounds,
1439-
ImplTraitContext::Universal(in_band_ty_params, parent_def_id),
1440-
)
1441-
});
1430+
let hir_bounds = self.lower_param_bounds(
1431+
bounds,
1432+
ImplTraitContext::Universal(in_band_ty_params, parent_def_id),
1433+
);
14421434
// Set the name to `impl Bound1 + Bound2`.
14431435
let ident = Ident::from_str_and_span(&pprust::ty_to_string(t), span);
14441436
in_band_ty_params.push(hir::GenericParam {

compiler/rustc_middle/src/hir/map/collector.rs

+2-20
Original file line numberDiff line numberDiff line change
@@ -373,26 +373,8 @@ impl<'a, 'hir> Visitor<'hir> for NodeCollector<'a, 'hir> {
373373
}
374374

375375
fn visit_generic_param(&mut self, param: &'hir GenericParam<'hir>) {
376-
if let hir::GenericParamKind::Type {
377-
synthetic: Some(hir::SyntheticTyParamKind::ImplTrait),
378-
..
379-
} = param.kind
380-
{
381-
debug_assert_eq!(
382-
param.hir_id.owner,
383-
self.definitions.opt_hir_id_to_local_def_id(param.hir_id).unwrap()
384-
);
385-
self.with_dep_node_owner(param.hir_id.owner, param, |this, hash| {
386-
this.insert_with_hash(param.span, param.hir_id, Node::GenericParam(param), hash);
387-
388-
this.with_parent(param.hir_id, |this| {
389-
intravisit::walk_generic_param(this, param);
390-
});
391-
});
392-
} else {
393-
self.insert(param.span, param.hir_id, Node::GenericParam(param));
394-
intravisit::walk_generic_param(self, param);
395-
}
376+
self.insert(param.span, param.hir_id, Node::GenericParam(param));
377+
intravisit::walk_generic_param(self, param);
396378
}
397379

398380
fn visit_const_param_default(&mut self, param: HirId, ct: &'hir AnonConst) {

compiler/rustc_passes/src/hir_id_validator.rs

-13
Original file line numberDiff line numberDiff line change
@@ -172,17 +172,4 @@ impl<'a, 'hir> intravisit::Visitor<'hir> for HirIdValidator<'a, 'hir> {
172172
// we are currently in. So for those it's correct that they have a
173173
// different owner.
174174
}
175-
176-
fn visit_generic_param(&mut self, param: &'hir hir::GenericParam<'hir>) {
177-
if let hir::GenericParamKind::Type {
178-
synthetic: Some(hir::SyntheticTyParamKind::ImplTrait),
179-
..
180-
} = param.kind
181-
{
182-
// Synthetic impl trait parameters are owned by the node of the desugared type.
183-
// This means it is correct for them to have a different owner.
184-
} else {
185-
intravisit::walk_generic_param(self, param);
186-
}
187-
}
188175
}

compiler/rustc_save_analysis/src/dump_visitor.rs

-9
Original file line numberDiff line numberDiff line change
@@ -320,15 +320,6 @@ impl<'tcx> DumpVisitor<'tcx> {
320320
for param in generics.params {
321321
match param.kind {
322322
hir::GenericParamKind::Lifetime { .. } => {}
323-
hir::GenericParamKind::Type {
324-
synthetic: Some(hir::SyntheticTyParamKind::ImplTrait),
325-
..
326-
} => {
327-
return self
328-
.nest_typeck_results(self.tcx.hir().local_def_id(param.hir_id), |this| {
329-
this.visit_generics(generics)
330-
});
331-
}
332323
hir::GenericParamKind::Type { .. } => {
333324
let param_ss = param.name.ident().span;
334325
let name = escape(self.span.snippet(param_ss));

0 commit comments

Comments
 (0)