diff --git a/crates/wast/src/ast/table.rs b/crates/wast/src/ast/table.rs index ef019d0f4d..0a5dcb2fd7 100644 --- a/crates/wast/src/ast/table.rs +++ b/crates/wast/src/ast/table.rs @@ -188,15 +188,15 @@ impl<'a> Parse<'a> for ElemPayload<'a> { impl<'a> ElemPayload<'a> { fn parse_tail(parser: Parser<'a>, ty: Option>) -> Result { - let ty = match ty { + let (must_use_indices, ty) = match ty { None => { parser.parse::>()?; - ast::RefType::func() + (true, ast::RefType::func()) } - Some(ty) => ty, + Some(ty) => (false, ty), }; if let ast::HeapType::Func = ty.heap { - if parser.peek::>() { + if must_use_indices || parser.peek::>() { let mut elems = Vec::new(); while !parser.is_empty() { elems.push(parser.parse::>()?.0); diff --git a/tests/local/empty-elem.wast b/tests/local/empty-elem.wast new file mode 100644 index 0000000000..e30f9bd092 --- /dev/null +++ b/tests/local/empty-elem.wast @@ -0,0 +1,6 @@ +(module + (elem) + (elem func) + (elem funcref) + (elem declare func) + (elem declare funcref))