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:
Peter Huene
2020-07-06 14:17:42 -07:00
parent 3a33749404
commit b391817c0f
2 changed files with 51 additions and 0 deletions

View File

@@ -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(())
}

View 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
)
)