package a
func Marshal[foobar any]() {
_ = NewEncoder[foobar]()
}
func NewEncoder[foobar any]() *Encoder[foobar] {
return nil
}
type Encoder[foobar any] struct {
}
func (e *Encoder[foobar]) EncodeToken(t Token[foobar]) {
}
type Token[foobar any] any
package b
import "a"
func F() {
a.Marshal[int]()
}
$GOROOT/test/typeparam/issueXXXX.dir/a.go:18:6: internal compiler error: failed to find type loop for: a.Token[int]
goroutine 1 [running]:
runtime/debug.Stack()
/Users/khr/sandbox/ro/src/runtime/debug/stack.go:24 +0x65
cmd/compile/internal/base.FatalfAt({0x1?, 0x0?}, {0x193390a, 0x20}, {0xc0003ead00, 0x1, 0x1})
/Users/khr/sandbox/ro/src/cmd/compile/internal/base/print.go:227 +0x1d7
cmd/compile/internal/base.Fatalf(...)
/Users/khr/sandbox/ro/src/cmd/compile/internal/base/print.go:196
cmd/compile/internal/types.reportTypeLoop(0xc0003ed880)
/Users/khr/sandbox/ro/src/cmd/compile/internal/types/size.go:312 +0xbf
cmd/compile/internal/types.CalcSize(0xc0003ed880)
/Users/khr/sandbox/ro/src/cmd/compile/internal/types/size.go:477 +0x68d
cmd/compile/internal/types.calcStructOffset(0xc0003ed960, 0xc0003edab0, 0x8, 0x8)
/Users/khr/sandbox/ro/src/cmd/compile/internal/types/size.go:191 +0xd3
cmd/compile/internal/types.CalcSize(0xc0003edb90)
/Users/khr/sandbox/ro/src/cmd/compile/internal/types/size.go:532 +0x90e
cmd/compile/internal/types.ResumeCheckSize()
/Users/khr/sandbox/ro/src/cmd/compile/internal/types/size.go:633 +0x4e
cmd/compile/internal/typecheck.(*Tsubster).Typ(0x1f95aa0?, 0xc0003e0340?)
/Users/khr/sandbox/ro/src/cmd/compile/internal/typecheck/subr.go:1051 +0x2f
cmd/compile/internal/noder.(*genInst).getDictionarySym(0x1f95aa0, 0xc0003e0340, {0xc0000ba518, 0x1, 0x1}, 0x0)
/Users/khr/sandbox/ro/src/cmd/compile/internal/noder/stencil.go:1565 +0x437
cmd/compile/internal/noder.(*genInst).getDictionaryValue(0x0?, {0xba4f0?, 0xc0?}, 0xc0000ba618?, {0xc0000ba518?, 0xc0003d7600?, 0xc0000abd70?}, 0xc0?)
/Users/khr/sandbox/ro/src/cmd/compile/internal/noder/stencil.go:1764 +0x39
cmd/compile/internal/noder.(*genInst).getDictOrSubdict(0x1f95aa0?, 0xc0003e0340?, {0x1a94718?, 0xc0003207e0?}, 0xc0000d53a8?, {0xc0000ba518, 0x1, 0x1}, 0x0?)
/Users/khr/sandbox/ro/src/cmd/compile/internal/noder/stencil.go:601 +0xdc
cmd/compile/internal/noder.(*genInst).scanForGenCalls.func1({0x1a94718, 0xc0003207e0?})
/Users/khr/sandbox/ro/src/cmd/compile/internal/noder/stencil.go:152 +0x32f
cmd/compile/internal/ir.Visit.func1({0x1a94718, 0xc0003207e0})
/Users/khr/sandbox/ro/src/cmd/compile/internal/ir/visit.go:105 +0x30
cmd/compile/internal/ir.doNodes(...)
/Users/khr/sandbox/ro/src/cmd/compile/internal/ir/node_gen.go:1512
cmd/compile/internal/ir.(*Func).doChildren(0x1a95078?, 0xc0000abad0?)
/Users/khr/sandbox/ro/src/cmd/compile/internal/ir/func.go:152 +0x6e
cmd/compile/internal/ir.DoChildren(...)
/Users/khr/sandbox/ro/src/cmd/compile/internal/ir/visit.go:94
cmd/compile/internal/ir.Visit.func1({0x1a95078, 0xc0003d7080})
/Users/khr/sandbox/ro/src/cmd/compile/internal/ir/visit.go:106 +0x57
cmd/compile/internal/ir.Visit({0x1a95078, 0xc0003d7080}, 0xc0000bfbc0)
/Users/khr/sandbox/ro/src/cmd/compile/internal/ir/visit.go:108 +0xb8
cmd/compile/internal/noder.(*genInst).scanForGenCalls(0x1f95aa0, {0x1a95078, 0xc0003d7080})
/Users/khr/sandbox/ro/src/cmd/compile/internal/noder/stencil.go:133 +0x1f0
cmd/compile/internal/noder.(*genInst).buildInstantiations(0x1f95aa0)
/Users/khr/sandbox/ro/src/cmd/compile/internal/noder/stencil.go:60 +0x69
cmd/compile/internal/noder.BuildInstantiations(...)
/Users/khr/sandbox/ro/src/cmd/compile/internal/noder/stencil.go:44
cmd/compile/internal/noder.(*irgen).generate(0xc0002f6240, {0xc0000ba428, 0x1, 0x203000?})
/Users/khr/sandbox/ro/src/cmd/compile/internal/noder/irgen.go:331 +0x3d1
cmd/compile/internal/noder.check2({0xc0000ba428, 0x1, 0x1})
/Users/khr/sandbox/ro/src/cmd/compile/internal/noder/irgen.go:92 +0x16d
cmd/compile/internal/noder.LoadPackage({0xc0000c4070, 0x1, 0x0?})
/Users/khr/sandbox/ro/src/cmd/compile/internal/noder/noder.go:90 +0x335
cmd/compile/internal/gc.Main(0x194d1c8)
/Users/khr/sandbox/ro/src/cmd/compile/internal/gc/main.go:191 +0xb13
main.main()
/Users/khr/sandbox/ro/src/cmd/compile/main.go:55 +0xdd
The error "failed to find type loop" isn't really the bug, as that just means it was trying to print an error and couldn't find out why it was trying to print the error. The real problem is why CalcSize is calling reportTypeLoop at all, as there shouldn't be an error. Something about stenciling/instantiating is making types that look incomplete when they shouldn't look that way.
The compiler fails when compiling
bwith:The error "failed to find type loop" isn't really the bug, as that just means it was trying to print an error and couldn't find out why it was trying to print the error. The real problem is why
CalcSizeis callingreportTypeLoopat all, as there shouldn't be an error. Something about stenciling/instantiating is making types that look incomplete when they shouldn't look that way.@danscales