Skip to content

Commit b998b51

Browse files
committedFeb 7, 2024
Actually walk fields of Adt definitions
1 parent 0b97d18 commit b998b51

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed
 

‎compiler/rustc_ty_utils/src/sig_types.rs

+11-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
use std::ops::ControlFlow;
55

66
use rustc_hir::{def::DefKind, def_id::LocalDefId};
7-
use rustc_middle::ty::TyCtxt;
7+
use rustc_middle::ty::{self, TyCtxt};
88
use rustc_span::Span;
99
use rustc_type_ir::visit::TypeVisitable;
1010

@@ -58,7 +58,16 @@ pub(crate) fn walk_types<'tcx, V: SpannedTypeVisitor<'tcx>>(
5858
// Look at field types
5959
DefKind::Struct | DefKind::Union | DefKind::Enum => {
6060
let span = tcx.def_ident_span(item).unwrap();
61-
visitor.visit(span, tcx.type_of(item).instantiate_identity());
61+
let ty = tcx.type_of(item).instantiate_identity();
62+
visitor.visit(span, ty);
63+
let ty::Adt(def, args) = ty.kind() else {
64+
span_bug!(span, "invalid type for {kind:?}: {:#?}", ty.kind())
65+
};
66+
for field in def.all_fields() {
67+
let span = tcx.def_ident_span(field.did).unwrap();
68+
let ty = field.ty(tcx, args);
69+
visitor.visit(span, ty);
70+
}
6271
for (pred, span) in tcx.predicates_of(item).instantiate_identity(tcx) {
6372
visitor.visit(span, pred)?;
6473
}

0 commit comments

Comments
 (0)