mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
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
@ -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…
Reference in New Issue
Block a user