fix miri engine debug output for uninitialized locals

This commit is contained in:
Ralf Jung 2019-04-07 12:52:56 +02:00
parent 525c68cf95
commit ae1f8ab4aa

View file

@ -698,15 +698,10 @@ impl<'a, 'mir, 'tcx: 'mir, M: Machine<'a, 'mir, 'tcx>> InterpretCx<'a, 'mir, 'tc
} }
write!(msg, ":").unwrap(); write!(msg, ":").unwrap();
match self.stack[frame].locals[local].access() { match self.stack[frame].locals[local].state {
Err(err) => { LocalValue::Dead => write!(msg, " is dead").unwrap(),
if let InterpError::DeadLocal = err.kind { LocalValue::Uninitialized => write!(msg, " is uninitialized").unwrap(),
write!(msg, " is dead").unwrap(); LocalValue::Live(Operand::Indirect(mplace)) => {
} else {
panic!("Failed to access local: {:?}", err);
}
}
Ok(Operand::Indirect(mplace)) => {
let (ptr, align) = mplace.to_scalar_ptr_align(); let (ptr, align) = mplace.to_scalar_ptr_align();
match ptr { match ptr {
Scalar::Ptr(ptr) => { Scalar::Ptr(ptr) => {
@ -716,13 +711,13 @@ impl<'a, 'mir, 'tcx: 'mir, M: Machine<'a, 'mir, 'tcx>> InterpretCx<'a, 'mir, 'tc
ptr => write!(msg, " by integral ref: {:?}", ptr).unwrap(), ptr => write!(msg, " by integral ref: {:?}", ptr).unwrap(),
} }
} }
Ok(Operand::Immediate(Immediate::Scalar(val))) => { LocalValue::Live(Operand::Immediate(Immediate::Scalar(val))) => {
write!(msg, " {:?}", val).unwrap(); write!(msg, " {:?}", val).unwrap();
if let ScalarMaybeUndef::Scalar(Scalar::Ptr(ptr)) = val { if let ScalarMaybeUndef::Scalar(Scalar::Ptr(ptr)) = val {
allocs.push(ptr.alloc_id); allocs.push(ptr.alloc_id);
} }
} }
Ok(Operand::Immediate(Immediate::ScalarPair(val1, val2))) => { LocalValue::Live(Operand::Immediate(Immediate::ScalarPair(val1, val2))) => {
write!(msg, " ({:?}, {:?})", val1, val2).unwrap(); write!(msg, " ({:?}, {:?})", val1, val2).unwrap();
if let ScalarMaybeUndef::Scalar(Scalar::Ptr(ptr)) = val1 { if let ScalarMaybeUndef::Scalar(Scalar::Ptr(ptr)) = val1 {
allocs.push(ptr.alloc_id); allocs.push(ptr.alloc_id);