Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmd/cgo: compiler stack overflow on exported function referencing an invalid recursive type #69176

Closed
pdmccormick opened this issue Aug 30, 2024 · 2 comments
Assignees
Labels
compiler/runtime Issues related to the Go compiler and/or runtime.
Milestone

Comments

@pdmccormick
Copy link

pdmccormick commented Aug 30, 2024

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
@gopherbot gopherbot added the compiler/runtime Issues related to the Go compiler and/or runtime. label Aug 30, 2024
@timothy-king timothy-king self-assigned this Aug 30, 2024
@gopherbot
Copy link
Contributor

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
compiler/runtime Issues related to the Go compiler and/or runtime.
Projects
Development

No branches or pull requests

6 participants