Skip to content

cmd/compile: crash in type loop detection since CL 258177 #42075

@mvdan

Description

@mvdan
$ 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    FrozenDueToAgeNeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.release-blocker

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions