Wasm translator multi-value bugfix: handle branch to loop with loop params.

This commit is contained in:
Chris Fallin
2020-06-05 16:12:48 -07:00
parent 00abfcd943
commit cc8630d9b4
2 changed files with 14 additions and 1 deletions

View File

@@ -361,7 +361,7 @@ pub fn translate_operator<FE: FuncEnvironment + ?Sized>(
// We signal that all the code that follows until the next End is unreachable // We signal that all the code that follows until the next End is unreachable
frame.set_branched_to_exit(); frame.set_branched_to_exit();
let return_count = if frame.is_loop() { let return_count = if frame.is_loop() {
0 frame.num_param_values()
} else { } else {
frame.num_return_values() frame.num_return_values()
}; };

View File

@@ -0,0 +1,13 @@
(module
(func (export "run") (result i32)
(local $i i32)
(i32.const 0) ;; sum
(i32.const 10) ;; i
(loop $loop (param i32 i32) (result i32)
(local.tee $i)
(i32.add) ;; sum = i + sum
(i32.sub (local.get $i) (i32.const 1))
(i32.eqz (local.tee $i))
(if (param i32) (result i32)
(then)
(else (local.get $i) (br $loop))))))