Skip to content

cmd/compile: internal compiler error: incomplete itab #49421

@mpx

Description

@mpx

The following code snippet generates an internal compiler error with tip:

// Fails on:
// go version devel +61d789db3a Sat Nov 6 19:41:15 2021 +0000 linux/amd64
package main

func main() {
    var a, b foo
    bar(a, b)
}

type foo int

func (a foo) less(b foo) bool {
    return a < b
}

type lesser[T any] interface {
    less(T) bool
    comparable
}

func bar[T lesser[T]](a, b T) {
    a.less(b)
}   

Stack trace:

# bug
<autogenerated>:1: internal compiler error: incomplete itab

goroutine 1 [running]:
runtime/debug.Stack()
        /home/build/go-devel/src/runtime/debug/stack.go:24 +0x65
cmd/compile/internal/base.FatalfAt({0x5a6850?, 0xc0?}, {0xd1b230, 0xf}, {0x0, 0x0, 0x0})
        /home/build/go-devel/src/cmd/compile/internal/base/print.go:227 +0x1ca
cmd/compile/internal/base.Fatalf(...)
        /home/build/go-devel/src/cmd/compile/internal/base/print.go:196
cmd/compile/internal/reflectdata.writeITab(0xc0000c6880, 0xc0005a6850, 0xc0005c09a0)
        /home/build/go-devel/src/cmd/compile/internal/reflectdata/reflect.go:1315 +0x4b0
cmd/compile/internal/reflectdata.ITabLsym(0xc0005c09a0?, 0xc0005a5520?)
        /home/build/go-devel/src/cmd/compile/internal/reflectdata/reflect.go:856 +0x19c
cmd/compile/internal/noder.(*genInst).finalizeSyms(0x1384d60)
        /home/build/go-devel/src/cmd/compile/internal/noder/stencil.go:1753 +0x64d
cmd/compile/internal/noder.(*genInst).buildInstantiations(0x1384d60, 0x1)
        /home/build/go-devel/src/cmd/compile/internal/noder/stencil.go:76 +0xb0
cmd/compile/internal/noder.BuildInstantiations(...)
        /home/build/go-devel/src/cmd/compile/internal/noder/stencil.go:47
cmd/compile/internal/noder.(*irgen).generate(0xc0005b8000, {0xc000074a60, 0x2, 0x203000?})
        /home/build/go-devel/src/cmd/compile/internal/noder/irgen.go:320 +0x3db
cmd/compile/internal/noder.check2({0xc000074a60, 0x2, 0x2})
        /home/build/go-devel/src/cmd/compile/internal/noder/irgen.go:92 +0x16d
cmd/compile/internal/noder.LoadPackage({0xc00001e220, 0x2, 0x0?})
        /home/build/go-devel/src/cmd/compile/internal/noder/noder.go:90 +0x335
cmd/compile/internal/gc.Main(0xd44290)
        /home/build/go-devel/src/cmd/compile/internal/gc/main.go:191 +0xb13
main.main()
        /home/build/go-devel/src/cmd/compile/main.go:55 +0xdd

This example builds successfully with the unified experiment.

Metadata

Metadata

Assignees

No one assigned

    Labels

    FrozenDueToAgeNeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.release-blocker

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions