Wasm translator multi-value bugfix: handle branch to loop with loop params.
This commit is contained in:
@@ -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()
|
||||||
};
|
};
|
||||||
|
|||||||
13
tests/wasm/loop-params.wat
Normal file
13
tests/wasm/loop-params.wat
Normal 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))))))
|
||||||
Reference in New Issue
Block a user