Skip to content

cmd/compile: deadlock #73539

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

Closed
Lumaraf opened this issue Apr 29, 2025 · 3 comments
Closed

cmd/compile: deadlock #73539

Lumaraf opened this issue Apr 29, 2025 · 3 comments
Labels
compiler/runtime Issues related to the Go compiler and/or runtime. WaitingForInfo Issue is not actionable because of missing required information, which needs to be provided.

Comments

@Lumaraf
Copy link

Lumaraf commented Apr 29, 2025

Go version

go version go1.24.2 windows/amd64

Output of go env in your module/workspace:

set AR=ar
set CC=gcc
set CGO_CFLAGS=-O2 -g
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-O2 -g
set CGO_ENABLED=0
set CGO_FFLAGS=-O2 -g
set CGO_LDFLAGS=-O2 -g
set CXX=g++
set GCCGO=gccgo
set GO111MODULE=on
set GOAMD64=v1
set GOARCH=amd64
set GOAUTH=netrc
set GOBIN=
set GOCACHE=C:\Users\Anwender\AppData\Local\go-build
set GOCACHEPROG=
set GODEBUG=
set GOENV=C:\Users\Anwender\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFIPS140=off
set GOFLAGS=
set GOGCCFLAGS=-m64 -fno-caret-diagnostics -Qunused-arguments -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=C:\Users\Anwender\AppData\Local\Temp\go-build380231616=/tmp/go-build -gno-record-gcc-switches
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMOD=E:\workspace\sudoku-solver\go.mod
set GOMODCACHE=C:\Users\Anwender\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\Anwender\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\Users\Anwender\go\pkg\mod\golang.org\t[email protected]
set GOSUMDB=sum.golang.org
set GOTELEMETRY=local
set GOTELEMETRYDIR=C:\Users\Anwender\AppData\Roaming\go\telemetry
set GOTMPDIR=
set GOTOOLCHAIN=auto
set GOTOOLDIR=C:\Users\Anwender\go\pkg\mod\golang.org\t[email protected]\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.24.2
set GOWORK=
set PKG_CONFIG=pkg-config

What did you do?

I am currently refactoring a project to use generics and at some point the go compiler stopped working.

What did you see happen?

The compiler deadlocks with the following message:

# github.com/lumaraf/sudoku-solver/restriction
fatal error: all goroutines are asleep - deadlock!

goroutine 1 [sync.Mutex.Lock]:
internal/sync.runtime_SemacquireMutex(0x2?, 0xf7?, 0xc00014a028?)
	runtime/sema.go:95 +0x25
internal/sync.(*Mutex).lockSlow(0xc0004d84f8)
	internal/sync/mutex.go:149 +0x15d
internal/sync.(*Mutex).Lock(...)
	internal/sync/mutex.go:70
sync.(*Mutex).Lock(...)
	sync/mutex.go:46
cmd/compile/internal/types2.(*Named).resolve(0xc0004d84d0)
	cmd/compile/internal/types2/named.go:176 +0x5f
cmd/compile/internal/types2.(*Named).TypeParams(...)
	cmd/compile/internal/types2/named.go:322
cmd/compile/internal/types2.(*subster).typ(0xc00014a798, {0x1b7c168, 0xc0004e5880})
	cmd/compile/internal/types2/subst.go:245 +0x82b
cmd/compile/internal/types2.(*subster).var_(0xc00014a5d8?, 0xc0004e58f0)
	cmd/compile/internal/types2/subst.go:288 +0x2c
cmd/compile/internal/types2.substList[...](...)
	cmd/compile/internal/types2/subst.go:317
cmd/compile/internal/types2.(*subster).tuple(0x21df1b25718?, 0xc00040cae0)
	cmd/compile/internal/types2/subst.go:304 +0xa3
cmd/compile/internal/types2.(*subster).typ(0xc00014a798, {0x1b7c140, 0xc0004e2c00})
	cmd/compile/internal/types2/subst.go:164 +0x44a
cmd/compile/internal/types2.(*Checker).subst(0x0, {0x0?, 0x0?, 0x0?}, {0x1b7c140, 0xc0004e2c00}, 0xc0004f0000, 0x0, 0xc00041e260)
	cmd/compile/internal/types2/subst.go:78 +0x1ac
cmd/compile/internal/types2.(*Checker).newAliasInstance(0x0, {0x0?, 0x45349b?, 0xc0?}, 0xc0004e2c40, {0xc00041ede0, 0x2, 0x2}, 0x0, 0xc00041e260)
	cmd/compile/internal/types2/alias.go:165 +0x1c5
cmd/compile/internal/types2.(*Checker).instance(0x0, {0x0, 0x0, 0x0}, {0x1b7d910, 0xc0004e2c40}, {0xc00041ede0, 0x2, 0x2}, 0x0, ...)
	cmd/compile/internal/types2/instantiate.go:150 +0x4b0
cmd/compile/internal/types2.Instantiate(0xc00041e260, {0x1b7c190, 0xc0004e2c40}, {0xc00041ede0, 0x2, 0x2}, 0x0)
	cmd/compile/internal/types2/instantiate.go:70 +0x326
cmd/compile/internal/importer.(*reader).doTyp(0xc00014abd0)
	cmd/compile/internal/importer/ureader.go:258 +0xcc
cmd/compile/internal/importer.(*pkgReader).typIdx(0xc00047c0e0, {0x47c0e0?, 0xc0?}, 0xc0004d4ba0)
	cmd/compile/internal/importer/ureader.go:231 +0x18e
cmd/compile/internal/importer.(*reader).typ(0xc00014adf8)
	cmd/compile/internal/importer/ureader.go:201 +0x68
cmd/compile/internal/importer.(*reader).doTyp(0xc00014adf8)
	cmd/compile/internal/importer/ureader.go:279 +0x15b
cmd/compile/internal/importer.(*pkgReader).typIdx(0xc00047c0e0, {0x47c0e0?, 0xc0?}, 0xc0004d4ba0)
	cmd/compile/internal/importer/ureader.go:231 +0x18e
cmd/compile/internal/importer.(*reader).typ(0xc00014b1e0)
	cmd/compile/internal/importer/ureader.go:201 +0x68
cmd/compile/internal/importer.(*reader).param(0xc00014b1e0)
	cmd/compile/internal/importer/ureader.go:365 +0x65
cmd/compile/internal/importer.(*reader).params(0xc00014b1e0)
	cmd/compile/internal/importer/ureader.go:355 +0x74
cmd/compile/internal/importer.(*reader).signature(0xc00014b1e0, 0x0, {0x0, 0x0, 0x0}, {0x0, 0x0, 0x0})
	cmd/compile/internal/importer/ureader.go:344 +0x65
cmd/compile/internal/importer.(*reader).interfaceType(0xc00014b1e0)
	cmd/compile/internal/importer/ureader.go:326 +0x16f
cmd/compile/internal/importer.(*reader).doTyp(0xc00014b1e0)
	cmd/compile/internal/importer/ureader.go:283 +0x3c5
cmd/compile/internal/importer.(*pkgReader).typIdx(0xc00047c0e0, {0x410480?, 0xc0?}, 0xc0004d4ba0)
	cmd/compile/internal/importer/ureader.go:231 +0x18e
cmd/compile/internal/importer.(*reader).typ(0xc0004d4c00)
	cmd/compile/internal/importer/ureader.go:201 +0x68
cmd/compile/internal/importer.ReadPackage.(*pkgReader).objIdx.func1.1(0x2?)
	cmd/compile/internal/importer/ureader.go:450 +0x3e
cmd/compile/internal/types2.(*Named).resolve(0xc0004d84d0)
	cmd/compile/internal/types2/named.go:215 +0xf7
cmd/compile/internal/types2.(*Named).TypeParams(...)
	cmd/compile/internal/types2/named.go:322
cmd/compile/internal/types2.(*subster).typ(0xc00014be30, {0x1b7c168, 0xc0004d8540})
	cmd/compile/internal/types2/subst.go:245 +0x82b
cmd/compile/internal/types2.(*subster).var_(0x196dc20?, 0xc0004d85b0)
	cmd/compile/internal/types2/subst.go:288 +0x2c
cmd/compile/internal/types2.substList[...](...)
	cmd/compile/internal/types2/subst.go:317
cmd/compile/internal/types2.(*subster).tuple(0x195f420?, 0xc00040c4f8)
	cmd/compile/internal/types2/subst.go:304 +0xa3
cmd/compile/internal/types2.(*subster).typ(0xc00014be30, {0x1b7c140, 0xc0004cfac0})
	cmd/compile/internal/types2/subst.go:165 +0x46b
cmd/compile/internal/types2.(*subster).func_(0xc000415900?, 0xc0004d8620)
	cmd/compile/internal/types2/subst.go:331 +0x2c
cmd/compile/internal/types2.substList[...](...)
	cmd/compile/internal/types2/subst.go:317
cmd/compile/internal/types2.(*subster).typ(0xc00014be30, {0x1b7c1e0, 0xc0004158b0})
	cmd/compile/internal/types2/subst.go:188 +0x9fa
cmd/compile/internal/types2.(*Checker).subst(0xc000430000, {0xc000400000?, 0x41ea60?, 0xc0?}, {0x1b7c1e0, 0xc0004158b0}, 0xc0004d14a0, 0xc0004d93b0, 0xc00041e260)
	cmd/compile/internal/types2/subst.go:78 +0x1ac
cmd/compile/internal/types2.(*Named).expandUnderlying(0xc0004d93b0)
	cmd/compile/internal/types2/named.go:670 +0x4e9
cmd/compile/internal/types2.(*Named).resolve(0xc0004d93b0)
	cmd/compile/internal/types2/named.go:189 +0x154
cmd/compile/internal/types2.(*Named).TypeParams(0x2142fb0?)
	cmd/compile/internal/types2/named.go:322 +0x13
cmd/compile/internal/types2.(*Checker).instantiatedType.func3()
	cmd/compile/internal/types2/typexpr.go:490 +0x154
cmd/compile/internal/types2.(*Checker).processDelayed(0xc000430000, 0x8)
	cmd/compile/internal/types2/check.go:525 +0x211
cmd/compile/internal/types2.(*Checker).stmt(0xc000430000, 0x0, {0x1b7ddd0, 0xc00041e020})
	cmd/compile/internal/types2/stmt.go:707 +0x130a
cmd/compile/internal/types2.(*Checker).stmtList(0xc000430000, 0x0, {0xc0004080b0?, 0xc0004d05d0?, 0x500000048?})
	cmd/compile/internal/types2/stmt.go:122 +0x85
cmd/compile/internal/types2.(*Checker).funcBody(0xc000430000, 0xc0004100c0?, {0xc000412010?, 0x26ca7f1667856fc?}, 0xc0004cec00, 0xc000418040, {0x0?, 0x0?})
	cmd/compile/internal/types2/stmt.go:42 +0x310
cmd/compile/internal/types2.(*Checker).objDecl.(*Checker).funcDecl.func4()
	cmd/compile/internal/types2/decl.go:775 +0x3a
cmd/compile/internal/types2.(*Checker).processDelayed(0xc000430000, 0x0)
	cmd/compile/internal/types2/check.go:525 +0x211
cmd/compile/internal/types2.(*Checker).checkFiles(0xc000430000, {0xc0004080c0?, 0xc000080008?, 0xc000080558?})
	cmd/compile/internal/types2/check.go:467 +0x814
cmd/compile/internal/types2.(*Checker).Files(0xc00001c600?, {0xc0004080c0?, 0x0?, 0x0?})
	cmd/compile/internal/types2/check.go:427 +0x75
cmd/compile/internal/types2.(*Config).Check(0xc00041a1c0, {0xc00001c600?, 0xc00000a3e0?}, {0xc0004080c0, 0x2, 0x2}, 0xc000410360)
	cmd/compile/internal/types2/api.go:488 +0x19d
cmd/compile/internal/noder.checkFiles({0x0, {0x0, 0x0}}, {0xc000037300, 0x2, 0x199e7a0?})
	cmd/compile/internal/noder/irgen.go:95 +0x5c9
cmd/compile/internal/noder.writePkgStub({0x0?, {0x0?, 0x0?}}, {0xc000037300, 0x2, 0x2})
	cmd/compile/internal/noder/unified.go:319 +0x6a
cmd/compile/internal/noder.unified({0x0?, {0x0?, 0x0?}}, {0xc000037300?, 0x19191e0?, 0x0?})
	cmd/compile/internal/noder/unified.go:195 +0xb3
cmd/compile/internal/noder.LoadPackage({0xc00010c120, 0x2, 0xe})
	cmd/compile/internal/noder/noder.go:77 +0x43a
cmd/compile/internal/gc.Main(0x1a39ac8)
	cmd/compile/internal/gc/main.go:208 +0xcc5
main.main()
	cmd/compile/main.go:57 +0xf9

What did you expect to see?

My program or an error what is wrong in my code.

@seankhliao seankhliao changed the title compiler deadlocks cmd/compile: deadlock Apr 29, 2025
@gopherbot gopherbot added the compiler/runtime Issues related to the Go compiler and/or runtime. label Apr 29, 2025
@randall77
Copy link
Contributor

Might this be #63285?

@cagedmantis
Copy link
Contributor

@Lumaraf Can you provide a snippet that reproduces the problem?

@cagedmantis cagedmantis added the WaitingForInfo Issue is not actionable because of missing required information, which needs to be provided. label Apr 30, 2025
@Lumaraf
Copy link
Author

Lumaraf commented May 1, 2025

So far i was unable to reproduce the error with a simple example. With the extra information from #63285 i was able to identify some pieces of my code that are involved in trigger the error. I managed to refactor my code to work around the bug. The loop of parametric types is still there, but now with an extra type involved which seems to help.

@Lumaraf Lumaraf closed this as completed May 1, 2025
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. WaitingForInfo Issue is not actionable because of missing required information, which needs to be provided.
Projects
None yet
Development

No branches or pull requests

4 participants