aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/lint/rust-lint-marklive.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/rust/lint/rust-lint-marklive.cc')
-rw-r--r--gcc/rust/lint/rust-lint-marklive.cc14
1 files changed, 10 insertions, 4 deletions
diff --git a/gcc/rust/lint/rust-lint-marklive.cc b/gcc/rust/lint/rust-lint-marklive.cc
index 4b095ab4..ef207bc 100644
--- a/gcc/rust/lint/rust-lint-marklive.cc
+++ b/gcc/rust/lint/rust-lint-marklive.cc
@@ -228,11 +228,17 @@ MarkLive::visit (HIR::FieldAccessExpr &expr)
}
rust_assert (adt != nullptr);
+ rust_assert (!adt->is_enum ());
+ rust_assert (adt->number_of_variants () == 1);
+
+ TyTy::VariantDef *variant = adt->get_variants ().at (0);
// get the field index
- size_t index = 0;
- adt->get_field (expr.get_field_name (), &index);
- if (index >= adt->num_fields ())
+ size_t index;
+ TyTy::StructFieldType *field;
+ bool ok = variant->lookup_field (expr.get_field_name (), &field, &index);
+ rust_assert (ok);
+ if (index >= variant->num_fields ())
{
rust_error_at (expr.get_receiver_expr ()->get_locus (),
"cannot access struct %s by index: %ld",
@@ -241,7 +247,7 @@ MarkLive::visit (HIR::FieldAccessExpr &expr)
}
// get the field hir id
- HirId field_id = adt->get_field (index)->get_ref ();
+ HirId field_id = field->get_ref ();
mark_hir_id (field_id);
}