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
|
||||
frame.set_branched_to_exit();
|
||||
let return_count = if frame.is_loop() {
|
||||
0
|
||||
frame.num_param_values()
|
||||
} else {
|
||||
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