Update Place and Operand to take slices
The latest locals() method in stable MIR returns slices instead of vecs. This commit also includes fixes to the existing tests that previously referenced the private locals field.
This commit is contained in:
parent
fe4dfb814b
commit
4b23bd4734
4 changed files with 15 additions and 15 deletions
|
@ -517,7 +517,7 @@ pub enum NullOp {
|
|||
}
|
||||
|
||||
impl Operand {
|
||||
pub fn ty(&self, locals: &LocalDecls) -> Ty {
|
||||
pub fn ty(&self, locals: &[LocalDecl]) -> Ty {
|
||||
match self {
|
||||
Operand::Copy(place) | Operand::Move(place) => place.ty(locals),
|
||||
Operand::Constant(c) => c.ty(),
|
||||
|
@ -532,7 +532,7 @@ impl Constant {
|
|||
}
|
||||
|
||||
impl Place {
|
||||
pub fn ty(&self, locals: &LocalDecls) -> Ty {
|
||||
pub fn ty(&self, locals: &[LocalDecl]) -> Ty {
|
||||
let _start_ty = locals[self.local].ty;
|
||||
todo!("Implement projection")
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@ fn test_body(body: mir::Body) {
|
|||
for term in body.blocks.iter().map(|bb| &bb.terminator) {
|
||||
match &term.kind {
|
||||
Call { func, .. } => {
|
||||
let TyKind::RigidTy(ty) = func.ty(&body.locals()).kind() else { unreachable!() };
|
||||
let TyKind::RigidTy(ty) = func.ty(body.locals()).kind() else { unreachable!() };
|
||||
let RigidTy::FnDef(def, args) = ty else { unreachable!() };
|
||||
let result = Instance::resolve(def, &args);
|
||||
assert!(result.is_ok());
|
||||
|
|
|
@ -47,7 +47,7 @@ fn test_stable_mir(_tcx: TyCtxt<'_>) -> ControlFlow<()> {
|
|||
|
||||
let bar = get_item(&items, (DefKind::Fn, "bar")).unwrap();
|
||||
let body = bar.body();
|
||||
assert_eq!(body.locals.len(), 2);
|
||||
assert_eq!(body.locals().len(), 2);
|
||||
assert_eq!(body.blocks.len(), 1);
|
||||
let block = &body.blocks[0];
|
||||
assert_eq!(block.statements.len(), 1);
|
||||
|
@ -62,7 +62,7 @@ fn test_stable_mir(_tcx: TyCtxt<'_>) -> ControlFlow<()> {
|
|||
|
||||
let foo_bar = get_item(&items, (DefKind::Fn, "foo_bar")).unwrap();
|
||||
let body = foo_bar.body();
|
||||
assert_eq!(body.locals.len(), 5);
|
||||
assert_eq!(body.locals().len(), 5);
|
||||
assert_eq!(body.blocks.len(), 4);
|
||||
let block = &body.blocks[0];
|
||||
match &block.terminator.kind {
|
||||
|
@ -72,29 +72,29 @@ fn test_stable_mir(_tcx: TyCtxt<'_>) -> ControlFlow<()> {
|
|||
|
||||
let types = get_item(&items, (DefKind::Fn, "types")).unwrap();
|
||||
let body = types.body();
|
||||
assert_eq!(body.locals.len(), 6);
|
||||
assert_eq!(body.locals().len(), 6);
|
||||
assert_matches!(
|
||||
body.locals[0].ty.kind(),
|
||||
body.locals()[0].ty.kind(),
|
||||
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Bool)
|
||||
);
|
||||
assert_matches!(
|
||||
body.locals[1].ty.kind(),
|
||||
body.locals()[1].ty.kind(),
|
||||
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Bool)
|
||||
);
|
||||
assert_matches!(
|
||||
body.locals[2].ty.kind(),
|
||||
body.locals()[2].ty.kind(),
|
||||
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Char)
|
||||
);
|
||||
assert_matches!(
|
||||
body.locals[3].ty.kind(),
|
||||
body.locals()[3].ty.kind(),
|
||||
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Int(stable_mir::ty::IntTy::I32))
|
||||
);
|
||||
assert_matches!(
|
||||
body.locals[4].ty.kind(),
|
||||
body.locals()[4].ty.kind(),
|
||||
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Uint(stable_mir::ty::UintTy::U64))
|
||||
);
|
||||
assert_matches!(
|
||||
body.locals[5].ty.kind(),
|
||||
body.locals()[5].ty.kind(),
|
||||
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Float(
|
||||
stable_mir::ty::FloatTy::F64
|
||||
))
|
||||
|
@ -123,10 +123,10 @@ fn test_stable_mir(_tcx: TyCtxt<'_>) -> ControlFlow<()> {
|
|||
for block in instance.body().blocks {
|
||||
match &block.terminator.kind {
|
||||
stable_mir::mir::TerminatorKind::Call { func, .. } => {
|
||||
let TyKind::RigidTy(ty) = func.ty(&body.locals).kind() else { unreachable!() };
|
||||
let TyKind::RigidTy(ty) = func.ty(&body.locals()).kind() else { unreachable!() };
|
||||
let RigidTy::FnDef(def, args) = ty else { unreachable!() };
|
||||
let next_func = Instance::resolve(def, &args).unwrap();
|
||||
match next_func.body().locals[1].ty.kind() {
|
||||
match next_func.body().locals()[1].ty.kind() {
|
||||
TyKind::RigidTy(RigidTy::Uint(_)) | TyKind::RigidTy(RigidTy::Tuple(_)) => {}
|
||||
other => panic!("{other:?}"),
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ const CRATE_NAME: &str = "input";
|
|||
fn test_translation(_tcx: TyCtxt<'_>) -> ControlFlow<()> {
|
||||
let main_fn = stable_mir::entry_fn().unwrap();
|
||||
let body = main_fn.body();
|
||||
let orig_ty = body.locals[0].ty;
|
||||
let orig_ty = body.locals()[0].ty;
|
||||
let rustc_ty = rustc_internal::internal(&orig_ty);
|
||||
assert!(rustc_ty.is_unit());
|
||||
ControlFlow::Continue(())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue