Update InterpCx::project_field to take FieldIdx
As suggested by Ralf in 142005.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
// Not in interpret to make sure we do not use private implementation details
|
||||
|
||||
use rustc_abi::VariantIdx;
|
||||
use rustc_abi::{FieldIdx, VariantIdx};
|
||||
use rustc_middle::query::Key;
|
||||
use rustc_middle::ty::layout::LayoutOf;
|
||||
use rustc_middle::ty::{self, Ty, TyCtxt};
|
||||
@@ -60,7 +60,7 @@ pub(crate) fn try_destructure_mir_constant_for_user_output<'tcx>(
|
||||
|
||||
let fields_iter = (0..field_count)
|
||||
.map(|i| {
|
||||
let field_op = ecx.project_field(&down, i).discard_err()?;
|
||||
let field_op = ecx.project_field(&down, FieldIdx::from_usize(i)).discard_err()?;
|
||||
let val = op_to_const(&ecx, &field_op, /* for diagnostics */ true);
|
||||
Some((val, field_op.layout.ty))
|
||||
})
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use rustc_abi::{BackendRepr, VariantIdx};
|
||||
use rustc_abi::{BackendRepr, FieldIdx, VariantIdx};
|
||||
use rustc_data_structures::stack::ensure_sufficient_stack;
|
||||
use rustc_middle::mir::interpret::{EvalToValTreeResult, GlobalId, ReportedErrorInfo};
|
||||
use rustc_middle::ty::layout::{LayoutCx, LayoutOf, TyAndLayout};
|
||||
@@ -40,7 +40,7 @@ fn branches<'tcx>(
|
||||
}
|
||||
|
||||
for i in 0..field_count {
|
||||
let field = ecx.project_field(&place, i).unwrap();
|
||||
let field = ecx.project_field(&place, FieldIdx::from_usize(i)).unwrap();
|
||||
let valtree = const_to_valtree_inner(ecx, &field, num_nodes)?;
|
||||
branches.push(valtree);
|
||||
}
|
||||
@@ -437,7 +437,7 @@ fn valtree_into_mplace<'tcx>(
|
||||
ty::Str | ty::Slice(_) | ty::Array(..) => {
|
||||
ecx.project_index(place, i as u64).unwrap()
|
||||
}
|
||||
_ => ecx.project_field(&place_adjusted, i).unwrap(),
|
||||
_ => ecx.project_field(&place_adjusted, FieldIdx::from_usize(i)).unwrap(),
|
||||
};
|
||||
|
||||
debug!(?place_inner);
|
||||
|
||||
Reference in New Issue
Block a user