bytecodealliance / bytecodealliance/go-modules
wit-bindgen-go hangs on deeply nested result types
- Dominant language
- Go
- Stars
- 148
- Forks
- 20
- PR merge metrics
- No merged PRs in 30d
Description
**Summary**
`wit-bindgen-go generate` hangs and is eventually killed (SIGTERM) when processing a legal WIT package that contains a very deeply nested `result<_, result<_, list<...>>>` shape.
**Steps-To-Reproduce**
```bash
ulimit -Sv 4194304 # 4GB virtual mem cap
go run ./cmd/wit-bindgen-go \
generate \
--versioned \
--generate-wit \
--out .poc_out \
poc.wit
```
**poc.wit** (validated by `wasm-tools component wit`)
```plain
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>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>, bool, bool, bool, bool, bool>;
type name3 = result<_, result<_, list>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
flags name4 {
name5,
name6,
name7,
name8,
name9,
name10,
name11,
name12,
name13,
}
type name14 = tuple>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>, 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>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
enum name12 {
name13,
name14,
}
type name10 = result>>>>>>>>>>>>>>>>>>>>>>>>>>>;
type name3 = result>>>>>>>>>>>>>>>>>>>>>>>>>>>;
enum name5 {
name6,
name7,
}
name2: func(name: result<_, list>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>, name1: bool, name2: bool, name3: bool);
name: async func(name: tuple>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>, bool>>) -> tuple>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>, bool>;
name9: func(name: result<_, list>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>, name1: bool, name2: bool, name3: bool);
x11: func();
x: func();
}
}
```
**Expected**
writes generated Go bindings successfully.
**Actual**
process spins until killed (OOM).
**Environment**
ubuntu 22.04, x86-64, Go 1.24.3
Contributor guide
Assessment
This issue has not been assessed yet.