Add a test case for unwind with saved FPRs on Windows.
This commit adds a simple test case that reproduces the problem in
This commit is contained in:
@@ -350,3 +350,14 @@ fn greeter_preload_callable_command() -> Result<()> {
|
||||
assert_eq!(stdout, "Hello _start\nHello callable greet\nHello done\n");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// Ensure successful WASI exit call with FPR saving frames on stack for Windows x64
|
||||
// See https://github.com/bytecodealliance/wasmtime/issues/1967
|
||||
#[test]
|
||||
fn exit_with_saved_fprs() -> Result<()> {
|
||||
let wasm = build_wasm("tests/wasm/exit_with_saved_fprs.wat")?;
|
||||
let output = run_wasmtime_for_output(&[wasm.path().to_str().unwrap(), "--disable-cache"])?;
|
||||
assert_eq!(output.status.code().unwrap(), 0);
|
||||
assert!(output.stdout.is_empty());
|
||||
Ok(())
|
||||
}
|
||||
|
||||
40
tests/wasm/exit_with_saved_fprs.wat
Normal file
40
tests/wasm/exit_with_saved_fprs.wat
Normal file
@@ -0,0 +1,40 @@
|
||||
;;; This is a test case for https://github.com/bytecodealliance/wasmtime/issues/1967
|
||||
(module
|
||||
(type (func (param i32)))
|
||||
|
||||
(import "wasi_snapshot_preview1" "proc_exit" (func (type 0)))
|
||||
|
||||
(func $exit (param i32)
|
||||
local.get 0
|
||||
call 0
|
||||
unreachable
|
||||
)
|
||||
|
||||
(func $do_something (param f64 f64 f64 f64 f64 f64 f64 f64)
|
||||
i32.const 0
|
||||
call $exit
|
||||
unreachable
|
||||
)
|
||||
|
||||
(func $has_saved_fprs (export "_start")
|
||||
(local f64 f64 f64 f64 f64 f64 f64 f64)
|
||||
(local.set 0 (f64.const 1))
|
||||
(local.set 1 (f64.const 2))
|
||||
(local.set 2 (f64.const 3))
|
||||
(local.set 3 (f64.const 4))
|
||||
(local.set 4 (f64.const 5))
|
||||
(local.set 5 (f64.const 6))
|
||||
(local.set 6 (f64.const 7))
|
||||
(local.set 7 (f64.const 8))
|
||||
local.get 0
|
||||
local.get 1
|
||||
local.get 2
|
||||
local.get 3
|
||||
local.get 4
|
||||
local.get 5
|
||||
local.get 6
|
||||
local.get 7
|
||||
call $do_something
|
||||
unreachable
|
||||
)
|
||||
)
|
||||
Reference in New Issue
Block a user