package x:name5;
interface name1 {
}
interface name2 {
}
interface name3 {
}
interface name4 {
}
interface name5 {
}
interface name6 {
}
interface name7 {
}
interface name8 {
}
interface name9 {
}
world name {
import name2:name3/x@1.1.0+1.2.0;
use name2:name3/x@1.1.0+1.2.0.{name5 as name};
type name2 = tuple<list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, bool>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>, bool, bool, bool, bool, bool>;
type name3 = result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, u32>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
flags name4 {
name5,
name6,
name7,
name8,
name9,
name10,
name11,
name12,
name13,
}
type name14 = tuple<list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, bool>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>, bool, bool, bool, bool, bool>;
record name15 {
name16: bool,
}
export name2:name3/x@1.1.0+1.2.0;
}
package name2:name3@1.1.0+1.2.0 {
interface x {
type name8 = result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, u32>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
enum name12 {
name13,
name14,
}
type name10 = result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<f32>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
type name3 = result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<result<char, result<f32>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
enum name5 {
name6,
name7,
}
name2: func(name: result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, u32>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>, name1: bool, name2: bool, name3: bool);
name: async func(name: tuple<f32, tuple<result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<bool>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>, bool>>) -> tuple<result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, u32>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>, bool>;
name9: func(name: result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, list<result<_, result<_, u32>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>, name1: bool, name2: bool, name3: bool);
x11: func();
x: func();
}
}
writes generated Go bindings successfully.
process spins until killed (OOM).
Summary
wit-bindgen-go generatehangs and is eventually killed (SIGTERM) when processing a legal WIT package that contains a very deeply nestedresult<_, result<_, list<...>>>shape.Steps-To-Reproduce
poc.wit (validated by
wasm-tools component wit)Expected
writes generated Go bindings successfully.
Actual
process spins until killed (OOM).
Environment
ubuntu 22.04, x86-64, Go 1.24.3