Skip to content

cmd/compile: internal compiler error: Type.Elem TYPEPARAM #48609

@mattn

Description

@mattn

What version of Go are you using (go version)?

$ go version
go version devel go1.18-fe8347b61a Fri Sep 24 10:51:48 2021 +0000 windows/amd64

Does this issue reproduce with the latest release?

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
set GO111MODULE=on
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\mattn\AppData\Local\go-build
set GOENV=C:\Users\mattn\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\mattn\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\mattn\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\dev\go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\dev\go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=devel go1.18-fe8347b61a Fri Sep 24 10:51:48 2021 +0000
set GCCGO=gccgo
set GOAMD64=v1
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=C:\Users\mattn\go\src\github.com\mattn\go-generics-example\constraints\go.mod
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\mattn\AppData\Local\Temp\go-build2745930428=/tmp/go-build -gno-record-gcc-switches

What did you do?

Compile this code

package main

import (
    "constraints"
    "context"
    "fmt"
)

func makeChan[T constraints.Chan[E], E any](ctx context.Context, arr []E) T {
    ch := make(T)
    go func() {
        defer close(ch)
        for _, v := range arr {
            select {
            case <-ctx.Done():
                return
            default:
            }
            ch <- v
        }
    }()
    return ch
}

func main() {
    for v := range makeChan(context.Background(), []int{1, 2, 3}) {
        fmt.Println(v)
    } 
}

What did you expect to see?

Compilation successfully

What did you see instead?

Internal compiler error

.\main.go:19:19: internal compiler error: Type.Elem TYPEPARAM

goroutine 1 [running]:
runtime/debug.Stack()
	C:/dev/go/src/runtime/debug/stack.go:24 +0x65
cmd/compile/internal/base.FatalfAt({0xf08d26d0, 0x213}, {0x12b4400, 0xc}, {0xc00011a5f0, 0x1, 0x1})
	C:/dev/go/src/cmd/compile/internal/base/print.go:227 +0x154
cmd/compile/internal/base.Fatalf(...)
	C:/dev/go/src/cmd/compile/internal/base/print.go:196
cmd/compile/internal/types.(*Type).Elem(0x48)
	C:/dev/go/src/cmd/compile/internal/types/type.go:989 +0x14d
cmd/compile/internal/noder.transformSend(0xc00064d4f0)
	C:/dev/go/src/cmd/compile/internal/noder/transform.go:502 +0x32
cmd/compile/internal/noder.(*irgen).stmt(0xc0000de0e0, {0x1413288, 0xc0000862a0})
	C:/dev/go/src/cmd/compile/internal/noder/stmt.go:44 +0x9b4
cmd/compile/internal/noder.(*irgen).stmts(0xc0000de0e0, {0xc00009e440, 0x2, 0x40})
	C:/dev/go/src/cmd/compile/internal/noder/stmt.go:19 +0xaf
cmd/compile/internal/noder.(*irgen).blockStmt(...)
	C:/dev/go/src/cmd/compile/internal/noder/stmt.go:205
cmd/compile/internal/noder.(*irgen).forStmt(0xc0000de0e0, 0xc00009a050)
	C:/dev/go/src/cmd/compile/internal/noder/stmt.go:240 +0x14f
cmd/compile/internal/noder.(*irgen).stmt(0xc0000de0e0, {0x1412f28, 0xc00009a050})
	C:/dev/go/src/cmd/compile/internal/noder/stmt.go:111 +0xaf1
cmd/compile/internal/noder.(*irgen).stmts(0xc0004930a0, {0xc00009e460, 0x2, 0x119b8b3})
	C:/dev/go/src/cmd/compile/internal/noder/stmt.go:19 +0xaf
cmd/compile/internal/noder.(*irgen).funcBody(0xc0000de0e0, 0xc000647b80, 0xc00064d1d0, 0xc0000a0200, 0xc0000a0240)
	C:/dev/go/src/cmd/compile/internal/noder/func.go:45 +0x25f
cmd/compile/internal/noder.(*irgen).funcLit(0xc0000de0e0, {0x1412140, 0xc000480d80}, 0xc00009e280)
	C:/dev/go/src/cmd/compile/internal/noder/expr.go:414 +0xe8
cmd/compile/internal/noder.(*irgen).expr0(0xc0000de0e0, {0x1412140, 0xc000480d80}, {0x1412f88, 0xc00009e280})
	C:/dev/go/src/cmd/compile/internal/noder/expr.go:110 +0x965
cmd/compile/internal/noder.(*irgen).expr(0xc0000de0e0, {0x1412f88, 0xc00009e280})
	C:/dev/go/src/cmd/compile/internal/noder/expr.go:81 +0x5ff
cmd/compile/internal/noder.(*irgen).expr0(0xc0000de0e0, {0x14121b8, 0x0}, {0x1412d78, 0xc0000a0400})
	C:/dev/go/src/cmd/compile/internal/noder/expr.go:116 +0x166
cmd/compile/internal/noder.(*irgen).expr(0xc0000de0e0, {0x1412d78, 0xc0000a0400})
	C:/dev/go/src/cmd/compile/internal/noder/expr.go:81 +0x5ff
cmd/compile/internal/noder.(*irgen).stmt(0xc0000de0e0, {0x1412da8, 0xc00009e260})
	C:/dev/go/src/cmd/compile/internal/noder/stmt.go:100 +0xa65
cmd/compile/internal/noder.(*irgen).stmts(0xc00064b960, {0xc0000a0440, 0x3, 0xc00060e498})
	C:/dev/go/src/cmd/compile/internal/noder/stmt.go:19 +0xaf
cmd/compile/internal/noder.(*irgen).funcBody(0xc0000de0e0, 0xc0000942c0, 0x114701d, 0xc0000a0100, 0xc0000a0140)
	C:/dev/go/src/cmd/compile/internal/noder/func.go:45 +0x25f
cmd/compile/internal/noder.(*irgen).funcDecl.func1()
	C:/dev/go/src/cmd/compile/internal/noder/decl.go:128 +0x68
cmd/compile/internal/noder.(*irgen).generate(0xc0000de0e0, {0xc00005eb90, 0x2, 0x20})
	C:/dev/go/src/cmd/compile/internal/noder/irgen.go:262 +0x1df
cmd/compile/internal/noder.check2({0xc00005eb90, 0x2, 0x2})
	C:/dev/go/src/cmd/compile/internal/noder/irgen.go:93 +0x175
cmd/compile/internal/noder.LoadPackage({0xc0001280f0, 0x2, 0x0})
	C:/dev/go/src/cmd/compile/internal/noder/noder.go:90 +0x335
cmd/compile/internal/gc.Main(0x12e1890)
	C:/dev/go/src/cmd/compile/internal/gc/main.go:190 +0xaf3
main.main()
	C:/dev/go/src/cmd/compile/main.go:55 +0xdd

Metadata

Metadata

Assignees

No one assigned

    Labels

    FrozenDueToAgeNeedsFixThe path to resolution is known, but the work has not been done.

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions