interpreter: handle closure descriptors with less than two parameters

This might happen because of LTO.

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

View File

@ -180,8 +180,19 @@ impl Interpreter {
assert!(self.descriptor_table_idx.is_none());
let func = module.funcs.get(id);
assert_eq!(module.types.get(func.ty()).params().len(), 2);
self.call(id, module, &[0, 0]);
let params = module.types.get(func.ty()).params();
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 =
self.descriptor_table_idx
.take()