$ cat crash.go
package hamt
type T1 struct {
x int
f T2
}
type T2 struct {
f T1
}
$ go1 version
go version go1.15.3 linux/amd64
$ go1 build crash.go
# command-line-arguments
./crash.go:8:6: invalid recursive type T2
$ go version
go version devel +c8f6135d4f Sat Oct 17 07:18:20 2020 +0000 linux/amd64
$ go build crash.go
# command-line-arguments
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xa139b2]
goroutine 1 [running]:
cmd/compile/internal/gc.findTypeLoop(0xc0003a86c0, 0xc00010e850, 0xc000052ab0)
/home/mvdan/tip/src/cmd/compile/internal/gc/align.go:202 +0xd2
cmd/compile/internal/gc.findTypeLoop(0xc0003e3500, 0xc00010e850, 0x1)
/home/mvdan/tip/src/cmd/compile/internal/gc/align.go:216 +0x2b9
cmd/compile/internal/gc.findTypeLoop(0xc0003e34a0, 0xc00010e850, 0xc00000e3f8)
/home/mvdan/tip/src/cmd/compile/internal/gc/align.go:202 +0xe7
cmd/compile/internal/gc.findTypeLoop(0xc0003e35c0, 0xc00010e850, 0x0)
/home/mvdan/tip/src/cmd/compile/internal/gc/align.go:216 +0x2b9
[...]
Note that the crash does not happen if I remove x int. This is a minified version of a real crash I encountered while generating Go code with type loops (by mistake).
I tried to figure out a quick fix, but couldn't really. cc @mdempsky @cuonglm
Note that the crash does not happen if I remove
x int
. This is a minified version of a real crash I encountered while generating Go code with type loops (by mistake).I tried to figure out a quick fix, but couldn't really. cc @mdempsky @cuonglm