Go version

go version go1.23.0 linux/amd64

Output of go env in your module/workspace:

GO111MODULE=''
GOARCH='amd64'
GOBIN=''
GOCACHE='/home/pdm/.cache/go-build'
GOENV='/home/pdm/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMODCACHE='/home/pdm/opt/golang/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/home/pdm/opt/golang'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/opt/go/current'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/opt/go/current/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.23.0'
GODEBUG=''
GOTELEMETRY='local'
GOTELEMETRYDIR='/home/pdm/.config/go/telemetry'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='gcc'
CXX='g++'
CGO_ENABLED='1'
GOMOD='/home/pdm/tmp/go/crash/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build3178629862=/tmp/go-build -gno-record-gcc-switches'

What did you do?

The Go compiler reports an error if you try to define a type recursively. For example, if you go build example.go the following:

package expected

type (
    Foo = Foo
)

... you will see:

# command-line-arguments
./example.go:4:2: invalid recursive type: Foo refers to itself

However, if you compile a cgo module with an invalid recursive type, but that type is used in an exported function, the compiler will crash with a stack overflow.

Example crash.go:

package bug

import "C"

type (
    Foo = Foo
)

//export Crash
func Crash(f *Foo) {
}

What did you see happen?

$ go version
go version go1.23.0 linux/amd64
$ go build crash.go
# command-line-arguments
runtime: goroutine stack exceeds 1000000000-byte limit
runtime: sp=0xc0201e0348 stack=[0xc0201e0000, 0xc0401e0000]
fatal error: stack overflow

runtime stack:
runtime.throw({0x61db8a?, 0x200000008?})
    runtime/panic.go:1067 +0x48 fp=0xc00006de88 sp=0xc00006de58 pc=0x468d08
runtime.newstack()
    runtime/stack.go:1117 +0x5bd fp=0xc00006dfc8 sp=0xc00006de88 pc=0x44ef3d
runtime.morestack()
    runtime/asm_amd64.s:621 +0x7a fp=0xc00006dfd0 sp=0xc00006dfc8 pc=0x46e3da

goroutine 1 gp=0xc0000061c0 m=4 mp=0xc000056e08 [running]:
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1416 +0xd4a fp=0xc0201e0358 sp=0xc0201e0350 pc=0x5c318a
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e0468 sp=0xc0201e0358 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e0578 sp=0xc0201e0468 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e0688 sp=0xc0201e0578 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e0798 sp=0xc0201e0688 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e08a8 sp=0xc0201e0798 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e09b8 sp=0xc0201e08a8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e0ac8 sp=0xc0201e09b8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e0bd8 sp=0xc0201e0ac8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e0ce8 sp=0xc0201e0bd8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e0df8 sp=0xc0201e0ce8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e0f08 sp=0xc0201e0df8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e1018 sp=0xc0201e0f08 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e1128 sp=0xc0201e1018 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e1238 sp=0xc0201e1128 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e1348 sp=0xc0201e1238 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e1458 sp=0xc0201e1348 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e1568 sp=0xc0201e1458 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e1678 sp=0xc0201e1568 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e1788 sp=0xc0201e1678 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e1898 sp=0xc0201e1788 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e19a8 sp=0xc0201e1898 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e1ab8 sp=0xc0201e19a8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e1bc8 sp=0xc0201e1ab8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e1cd8 sp=0xc0201e1bc8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e1de8 sp=0xc0201e1cd8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e1ef8 sp=0xc0201e1de8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e2008 sp=0xc0201e1ef8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e2118 sp=0xc0201e2008 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e2228 sp=0xc0201e2118 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e2338 sp=0xc0201e2228 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e2448 sp=0xc0201e2338 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e2558 sp=0xc0201e2448 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e2668 sp=0xc0201e2558 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e2778 sp=0xc0201e2668 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e2888 sp=0xc0201e2778 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e2998 sp=0xc0201e2888 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e2aa8 sp=0xc0201e2998 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e2bb8 sp=0xc0201e2aa8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e2cc8 sp=0xc0201e2bb8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e2dd8 sp=0xc0201e2cc8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e2ee8 sp=0xc0201e2dd8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e2ff8 sp=0xc0201e2ee8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e3108 sp=0xc0201e2ff8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e3218 sp=0xc0201e3108 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e3328 sp=0xc0201e3218 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e3438 sp=0xc0201e3328 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e3548 sp=0xc0201e3438 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e3658 sp=0xc0201e3548 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0201e3768 sp=0xc0201e3658 pc=0x5c316d
...1973683 frames elided...
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dc6a8 sp=0xc0401dc598 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dc7b8 sp=0xc0401dc6a8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dc8c8 sp=0xc0401dc7b8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dc9d8 sp=0xc0401dc8c8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dcae8 sp=0xc0401dc9d8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dcbf8 sp=0xc0401dcae8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dcd08 sp=0xc0401dcbf8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dce18 sp=0xc0401dcd08 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dcf28 sp=0xc0401dce18 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dd038 sp=0xc0401dcf28 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dd148 sp=0xc0401dd038 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dd258 sp=0xc0401dd148 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dd368 sp=0xc0401dd258 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dd478 sp=0xc0401dd368 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dd588 sp=0xc0401dd478 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dd698 sp=0xc0401dd588 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dd7a8 sp=0xc0401dd698 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dd8b8 sp=0xc0401dd7a8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dd9c8 sp=0xc0401dd8b8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401ddad8 sp=0xc0401dd9c8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401ddbe8 sp=0xc0401ddad8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401ddcf8 sp=0xc0401ddbe8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dde08 sp=0xc0401ddcf8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401ddf18 sp=0xc0401dde08 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401de028 sp=0xc0401ddf18 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401de138 sp=0xc0401de028 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401de248 sp=0xc0401de138 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401de358 sp=0xc0401de248 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401de468 sp=0xc0401de358 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401de578 sp=0xc0401de468 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401de688 sp=0xc0401de578 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401de798 sp=0xc0401de688 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401de8a8 sp=0xc0401de798 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401de9b8 sp=0xc0401de8a8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401deac8 sp=0xc0401de9b8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401debd8 sp=0xc0401deac8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dece8 sp=0xc0401debd8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401dedf8 sp=0xc0401dece8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401def08 sp=0xc0401dedf8 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc000074260})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401df018 sp=0xc0401def08 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669d90, 0xc0000742e0})
    cmd/cgo/out.go:1464 +0xd2d fp=0xc0401df128 sp=0xc0401df018 pc=0x5c316d
main.(*Package).cgoType(0xc00013e240, {0x669e20, 0xc0000102b8})
    cmd/cgo/out.go:1419 +0x1e5 fp=0xc0401df238 sp=0xc0401df128 pc=0x5c2625
main.(*Package).writeExports.func1({0x669e20, 0xc0000102b8}, {0x61a608?, 0x47ee45?}, {0xc000145348?, 0x47ed8a?, 0x78b0c0?})
    cmd/cgo/out.go:948 +0xa9 fp=0xc0401df308 sp=0xc0401df238 pc=0x5bfbc9
main.(*Package).writeExports.func2(0x611ac0?, {0xc0001a6000?, 0xc0001453d8?}, {0x669e20, 0xc0000102b8})
    cmd/cgo/out.go:967 +0x75 fp=0xc0401df368 sp=0xc0401df308 pc=0x5bfad5
main.forFieldList(0x668748?, 0xc0401df5d8)
    cmd/cgo/out.go:1383 +0xf1 fp=0xc0401df3e8 sp=0xc0401df368 pc=0x5c23d1
main.(*Package).writeExports(0xc00013e240, {0x668708, 0xc000184020}, {0x668708, 0xc000184028}, {0x668708, 0xc000184030}, {0x668708, 0xc000184038})
    cmd/cgo/out.go:965 +0x538 fp=0xc0401df610 sp=0xc0401df3e8 pc=0x5bdd38
main.(*Package).writeDefs(0xc00013e240)
    cmd/cgo/out.go:247 +0x1a90 fp=0xc0401dfa10 sp=0xc0401df610 pc=0x5b7930
main.main()
    cmd/cgo/main.go:462 +0x160f fp=0xc0401dff50 sp=0xc0401dfa10 pc=0x5b4e2f
runtime.main()
    runtime/proc.go:272 +0x28b fp=0xc0401dffe0 sp=0xc0401dff50 pc=0x436e2b
runtime.goexit({})
    runtime/asm_amd64.s:1700 +0x1 fp=0xc0401dffe8 sp=0xc0401dffe0 pc=0x470101

goroutine 2 gp=0xc000006700 m=nil [force gc (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
    runtime/proc.go:424 +0xce fp=0xc000050fa8 sp=0xc000050f88 pc=0x468e2e
runtime.goparkunlock(...)
    runtime/proc.go:430
runtime.forcegchelper()
    runtime/proc.go:337 +0xb3 fp=0xc000050fe0 sp=0xc000050fa8 pc=0x437173
runtime.goexit({})
    runtime/asm_amd64.s:1700 +0x1 fp=0xc000050fe8 sp=0xc000050fe0 pc=0x470101
created by runtime.init.7 in goroutine 1
    runtime/proc.go:325 +0x1a

goroutine 3 gp=0xc000006c40 m=nil [GC sweep wait]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
    runtime/proc.go:424 +0xce fp=0xc000051780 sp=0xc000051760 pc=0x468e2e
runtime.goparkunlock(...)
    runtime/proc.go:430
runtime.bgsweep(0xc000072000)
    runtime/mgcsweep.go:277 +0x94 fp=0xc0000517c8 sp=0xc000051780 pc=0x422554
runtime.gcenable.gowrap1()
    runtime/mgc.go:203 +0x25 fp=0xc0000517e0 sp=0xc0000517c8 pc=0x416ee5
runtime.goexit({})
    runtime/asm_amd64.s:1700 +0x1 fp=0xc0000517e8 sp=0xc0000517e0 pc=0x470101
created by runtime.gcenable in goroutine 1
    runtime/mgc.go:203 +0x66

goroutine 4 gp=0xc000006e00 m=nil [GC scavenge wait]:
runtime.gopark(0xc000072000?, 0x665f40?, 0x1?, 0x0?, 0xc000006e00?)
    runtime/proc.go:424 +0xce fp=0xc000051f78 sp=0xc000051f58 pc=0x468e2e
runtime.goparkunlock(...)
    runtime/proc.go:430
runtime.(*scavengerState).park(0x795600)
    runtime/mgcscavenge.go:425 +0x49 fp=0xc000051fa8 sp=0xc000051f78 pc=0x41ff89
runtime.bgscavenge(0xc000072000)
    runtime/mgcscavenge.go:653 +0x3c fp=0xc000051fc8 sp=0xc000051fa8 pc=0x4204fc
runtime.gcenable.gowrap2()
    runtime/mgc.go:204 +0x25 fp=0xc000051fe0 sp=0xc000051fc8 pc=0x416e85
runtime.goexit({})
    runtime/asm_amd64.s:1700 +0x1 fp=0xc000051fe8 sp=0xc000051fe0 pc=0x470101
created by runtime.gcenable in goroutine 1
    runtime/mgc.go:204 +0xa5

goroutine 5 gp=0xc000007340 m=nil [finalizer wait]:
runtime.gopark(0x490013?, 0xc000050660?, 0x7e?, 0xd1?, 0x7f2b2c5f3a48?)
    runtime/proc.go:424 +0xce fp=0xc000050620 sp=0xc000050600 pc=0x468e2e
runtime.runfinq()
    runtime/mfinal.go:193 +0x107 fp=0xc0000507e0 sp=0xc000050620 pc=0x415f67
runtime.goexit({})
    runtime/asm_amd64.s:1700 +0x1 fp=0xc0000507e8 sp=0xc0000507e0 pc=0x470101
created by runtime.createfing in goroutine 1
    runtime/mfinal.go:163 +0x3d

What did you expect to see?

I would have expected to see the same error as the non-cgo case:

# command-line-arguments
./example.go:6:2: invalid recursive type: Foo refers to itself

Comment From: gabyhelp

Related Issues and Documentation

(Emoji vote if this was helpful or unhelpful; more detailed feedback welcome in this discussion.)

Comment From: gopherbot

Change https://go.dev/cl/609975 mentions this issue: cmd/cgo: avoid endless recursion on recursive type