diff --git a/src/fn_call.rs b/src/fn_call.rs index f8ab005506..4d39625a7e 100644 --- a/src/fn_call.rs +++ b/src/fn_call.rs @@ -596,12 +596,12 @@ pub trait EvalContextExt<'a, 'mir, 'tcx: 'a+'mir>: crate::MiriEvalContextExt<'a, this.write_scalar(Scalar::from_uint(key, dest.layout.size), dest)?; } "TlsGetValue" => { - let key = this.read_scalar(args[0])?.to_bits(args[0].layout.size)?; + let key = this.read_scalar(args[0])?.to_u32()? as u128; let ptr = this.machine.tls.load_tls(key)?; this.write_scalar(ptr, dest)?; } "TlsSetValue" => { - let key = this.read_scalar(args[0])?.to_bits(args[0].layout.size)?; + let key = this.read_scalar(args[0])?.to_u32()? as u128; let new_ptr = this.read_scalar(args[1])?.not_undef()?; this.machine.tls.store_tls(key, new_ptr)?; @@ -615,22 +615,22 @@ pub trait EvalContextExt<'a, 'mir, 'tcx: 'a+'mir>: crate::MiriEvalContextExt<'a, this.write_scalar(handle, dest)?; } "WriteFile" => { - let handle = this.read_scalar(args[0])?.to_i32()?; + let handle = this.read_scalar(args[0])?.to_isize(this)?; let buf = this.read_scalar(args[1])?.not_undef()?; - let n = this.read_scalar(args[2])?.to_usize(&*this.tcx)?; + let n = this.read_scalar(args[2])?.to_u32()?; let written_place = this.deref_operand(args[3])?; this.write_null(written_place.into())?; // spec says we always write 0 first let written = if handle == -11 || handle == -12 { // stdout/stderr use std::io::{self, Write}; - let buf_cont = this.memory().read_bytes(buf, Size::from_bytes(n))?; + let buf_cont = this.memory().read_bytes(buf, Size::from_bytes(u64::from(n)))?; let res = if handle == -11 { io::stdout().write(buf_cont) } else { io::stderr().write(buf_cont) }; - res.ok().map(|n| n as u64) + res.ok().map(|n| n as u32) } else { eprintln!("Miri: Ignored output to handle {}", handle); Some(n) // pretend it all went well