1
0
mirror of https://github.com/fluencelabs/wasm-bindgen synced 2025-03-31 09:21:05 +00:00

interpreter: handle closure descriptors with less than two parameters

This might happen because of LTO.

Fixes 
This commit is contained in:
Nick Fitzgerald 2019-02-12 12:56:40 -08:00
parent 51989aed88
commit 6f00d9563f

@ -180,8 +180,19 @@ impl Interpreter {
assert!(self.descriptor_table_idx.is_none()); assert!(self.descriptor_table_idx.is_none());
let func = module.funcs.get(id); let func = module.funcs.get(id);
assert_eq!(module.types.get(func.ty()).params().len(), 2); let params = module.types.get(func.ty()).params();
self.call(id, module, &[0, 0]); assert!(
params.iter().all(|p| *p == walrus::ValType::I32),
"closure descriptors should only have i32 params"
);
let num_params = params.len();
assert!(
num_params <= 2,
"closure descriptors have 2 parameters, but might lose some parameters due to LTO"
);
let args = vec![0; num_params];
self.call(id, module, &args);
let descriptor_table_idx = let descriptor_table_idx =
self.descriptor_table_idx self.descriptor_table_idx
.take() .take()