Skip to content

cmd/compile: deadlock importing composite type including a recursive generic alias #79711

@csgura

Description

@csgura

Go version

gotip playground

Output of go env in your module/workspace:

gotip playground

What did you do?

https://go.dev/play/p/Cf71Fy1EaO-?v=gotip

type Option[T any] struct {
	Present bool
	Value   T
}

type Try[T any] struct {
	Error error
	Value T
}

type OptionT[T any] = Try[Option[T]]

func (o Option[T]) Traverse[R any](f func() Try[R]) OptionT[R] {
	panic("no matter")
}

What did you see happen?

fatal error: all goroutines are asleep - deadlock!

goroutine 1 [sync.Mutex.Lock]:
internal/sync.runtime_SemacquireMutex(0x1a29a70?, 0x80?, 0x78fca661e328?)
	/usr/local/go/src/runtime/sema.go:95 +0x25
internal/sync.(*Mutex).lockSlow(0x3238f2d688a0)
	/usr/local/go/src/internal/sync/mutex.go:149 +0x15a
internal/sync.(*Mutex).Lock(...)
	/usr/local/go/src/internal/sync/mutex.go:70
sync.(*Mutex).Lock(...)
	/usr/local/go/src/sync/mutex.go:46
cmd/compile/internal/types2.(*Named).unpack(0x3238f2d68880)
	/usr/local/go/src/cmd/compile/internal/types2/named.go:226 +0x74
cmd/compile/internal/types2.(*Named).TypeParams(...)
	/usr/local/go/src/cmd/compile/internal/types2/named.go:387
cmd/compile/internal/types2.(*subster).typ(0x3238f30f5138, {0x1a640b8, 0x3238f2d68a80})
	/usr/local/go/src/cmd/compile/internal/types2/subst.go:321 +0x44b
cmd/compile/internal/types2.substList[...](...)
	/usr/local/go/src/cmd/compile/internal/types2/subst.go:393
cmd/compile/internal/types2.(*subster).typ(0x3238f30f5138, {0x1a640b8, 0x3238f2d68b00})
	/usr/local/go/src/cmd/compile/internal/types2/subst.go:334 +0xbe2
cmd/compile/internal/types2.(*Checker).subst(0x0, {0x0?, 0xf2e5b5c0?, 0x3238?}, {0x1a640b8, 0x3238f2d68b00}, 0x3238f2e5b650, 0x0, 0x3238f2d234c0)
	/usr/local/go/src/cmd/compile/internal/types2/subst.go:78 +0x1b2
cmd/compile/internal/types2.(*Checker).newAliasInstance(0x0, {0x0?, 0xa661e32d?, 0x78fc?}, 0x3238f3090b00, {0x3238f2cd12c0, 0x1, 0x1}, 0x0, 0x3238f2d234c0)
	/usr/local/go/src/cmd/compile/internal/types2/alias.go:136 +0x1c8
cmd/compile/internal/types2.(*Checker).instance(0x0, {0x0, 0x0, 0x0}, {0x1a65420, 0x3238f3090b00}, {0x3238f2cd12c0, 0x1, 0x1}, 0x0, ...)
	/usr/local/go/src/cmd/compile/internal/types2/instantiate.go:145 +0x6e5
cmd/compile/internal/types2.Instantiate(0x3238f2d234c0, {0x1a640e0, 0x3238f3090b00}, {0x3238f2cd12c0, 0x1, 0x1}, 0x0)
	/usr/local/go/src/cmd/compile/internal/types2/instantiate.go:69 +0x356
cmd/compile/internal/importer.(*reader).doTyp(0x3238f2d915c8)
	/usr/local/go/src/cmd/compile/internal/importer/ureader.go:261 +0xcc
cmd/compile/internal/importer.(*pkgReader).typIdx(...)
	/usr/local/go/src/cmd/compile/internal/importer/ureader.go:234
cmd/compile/internal/importer.(*reader).typ(0x3238f2d257a0)
	/usr/local/go/src/cmd/compile/internal/importer/ureader.go:204 +0x196
cmd/compile/internal/importer.(*reader).param(0x3238f2d257a0)
	/usr/local/go/src/cmd/compile/internal/importer/ureader.go:372 +0x65
cmd/compile/internal/importer.(*reader).params(0x3238f2d257a0)
	/usr/local/go/src/cmd/compile/internal/importer/ureader.go:362 +0x74
cmd/compile/internal/importer.(*reader).signature(0x3238f2d257a0, 0x3238f2d25810, {0x3238f2ca4738, 0x1, 0x1}, {0x3238f2ca4750, 0x1, 0x1})
	/usr/local/go/src/cmd/compile/internal/importer/ureader.go:352 +0x85
cmd/compile/internal/importer.(*pkgReader).objIdx.func1.1(0x0?)
	/usr/local/go/src/cmd/compile/internal/importer/ureader.go:483 +0x355
cmd/compile/internal/types2.(*Named).unpack(0x3238f2d68880)
	/usr/local/go/src/cmd/compile/internal/types2/named.go:267 +0x130
cmd/compile/internal/types2.(*Named).TypeParams(...)
	/usr/local/go/src/cmd/compile/internal/types2/named.go:387
cmd/compile/internal/types2.isGeneric({0x1a640b8?, 0x3238f2d68880?})
	/usr/local/go/src/cmd/compile/internal/types2/predicates.go:146 +0xb9
cmd/compile/internal/types2.(*Checker).genericType(0x3238f2ca0600, {0x1a66070, 0x3238f308d6d0}, 0x3238f30f5b18)
	/usr/local/go/src/cmd/compile/internal/types2/typexpr.go:204 +0xe7
cmd/compile/internal/types2.(*Checker).instantiatedType(0x3238f2ca0600, {0x1a66070, 0x3238f308d6d0}, {0x3238f2cd1220, 0x1, 0x1})
	/usr/local/go/src/cmd/compile/internal/types2/typexpr.go:407 +0x1c6
cmd/compile/internal/types2.(*Checker).typInternal(0x3238f2ca0600, {0x1a66028, 0x3238f308e360}, 0x0)
	/usr/local/go/src/cmd/compile/internal/types2/typexpr.go:279 +0x8b5
cmd/compile/internal/types2.(*Checker).declaredType(0x3238f2ca0600, {0x1a66028, 0x3238f308e360}, 0x3238f2d91fa8?)
	/usr/local/go/src/cmd/compile/internal/types2/typexpr.go:184 +0x2f
cmd/compile/internal/types2.(*Checker).typ(...)
	/usr/local/go/src/cmd/compile/internal/types2/typexpr.go:141
cmd/compile/internal/types2.(*Checker).compositeLit(0x3238f2ca0600, 0x3238f3090740, 0x3238f2d68780, {0x0?, 0x0?})
	/usr/local/go/src/cmd/compile/internal/types2/literals.go:124 +0x11a
cmd/compile/internal/types2.(*Checker).exprInternal(0x3238f2ca0600, 0x5009d2?, 0x3238f3090740, {0x1a661d8, 0x3238f2d68780}, {0x0?, 0x0?})
	/usr/local/go/src/cmd/compile/internal/types2/expr.go:1073 +0x125
cmd/compile/internal/types2.(*Checker).rawExpr(0x3238f2ca0600, 0x0, 0x3238f3090740, {0x1a661d8?, 0x3238f2d68780?}, {0x0?, 0x0?}, 0x0)
	/usr/local/go/src/cmd/compile/internal/types2/expr.go:993 +0x1a9
cmd/compile/internal/types2.(*Checker).expr(0x3238f2ca0600, 0x0?, 0x3238f3090740, {0x1a661d8?, 0x3238f2d68780?})
	/usr/local/go/src/cmd/compile/internal/types2/expr.go:1316 +0x30
cmd/compile/internal/types2.(*Checker).initVars(...)
	/usr/local/go/src/cmd/compile/internal/types2/assignments.go:408
cmd/compile/internal/types2.(*Checker).shortVarDecl(0x3238f2ca0600, {0x1a636f0, 0x3238f2cd1210}, {0x3238f30f6c48, 0x1, 0x1a4f938?}, {0x3238f30f6c38, 0x1, 0x1})
	/usr/local/go/src/cmd/compile/internal/types2/assignments.go:583 +0x1205
cmd/compile/internal/types2.(*Checker).stmt(0x3238f2ca0600, 0x0, {0x1a65a40, 0x3238f30903c0})
	/usr/local/go/src/cmd/compile/internal/types2/stmt.go:498 +0xc45
cmd/compile/internal/types2.(*Checker).stmtList(...)
	/usr/local/go/src/cmd/compile/internal/types2/stmt.go:124
cmd/compile/internal/types2.(*Checker).funcBody(0x3238f2ca0600, 0x1a66a18?, {0x3238f2cb4cd0?, 0x0?}, 0x3238f3090700, 0x3238f3090380, {0x0?, 0x0?})
	/usr/local/go/src/cmd/compile/internal/types2/stmt.go:41 +0x3db
cmd/compile/internal/types2.(*Checker).funcDecl.func1()
	/usr/local/go/src/cmd/compile/internal/types2/decl.go:706 +0x3a
cmd/compile/internal/types2.(*Checker).processDelayed(0x3238f2ca0600, 0x0)
	/usr/local/go/src/cmd/compile/internal/types2/check.go:504 +0x211
cmd/compile/internal/types2.(*Checker).checkFiles(0x3238f2ca0600, {0x3238f2d932c0?, 0x3238f2d93168?, 0x42680a?})
	/usr/local/go/src/cmd/compile/internal/types2/check.go:446 +0x325
cmd/compile/internal/types2.(*Checker).Files(0x7fff281b1c5b?, {0x3238f2d932c0?, 0x0?, 0x0?})
	/usr/local/go/src/cmd/compile/internal/types2/check.go:414 +0x75
cmd/compile/internal/types2.(*Config).Check(0x3238f308e3c0, {0x7fff281b1c5b?, 0x3238f2cb4027?}, {0x3238f2d932c0, 0x1, 0x1}, 0x3238f308e420)
	/usr/local/go/src/cmd/compile/internal/types2/api.go:478 +0x19d
cmd/compile/internal/noder.checkFiles({0x0, {0x0, 0x0}}, {0x3238f2ca46c8, 0x1, 0x5?})
	/usr/local/go/src/cmd/compile/internal/noder/irgen.go:94 +0x651
cmd/compile/internal/noder.writePkgStub({0x0?, {0x0?, 0x0?}}, {0x3238f2ca46c8, 0x1, 0x1})
	/usr/local/go/src/cmd/compile/internal/noder/unified.go:328 +0x6a
cmd/compile/internal/noder.unified({0x0?, {0x0?, 0x0?}}, {0x3238f2ca46c8?, 0x195e7b0?, 0x1b436f8?})
	/usr/local/go/src/cmd/compile/internal/noder/unified.go:204 +0xb6
cmd/compile/internal/noder.LoadPackage({0x3238f2cc4260, 0x1, 0x2})
	/usr/local/go/src/cmd/compile/internal/noder/noder.go:76 +0x529
cmd/compile/internal/gc.Main(0x1a6a718)
	/usr/local/go/src/cmd/compile/internal/gc/main.go:217 +0xce5
main.main()
	/usr/local/go/src/cmd/compile/main.go:57 +0x105

What did you expect to see?

Compilation successful

Metadata

Metadata

Labels

NeedsFixThe path to resolution is known, but the work has not been done.compiler/runtimeIssues related to the Go compiler and/or runtime.

Type

No type
No fields configured for issues without a type.

Projects

Status
In Progress

Relationships

None yet

Development

No branches or pull requests

Issue actions