Skip to content

cmd/vet: index of of range error running test with GOEXPERIMENT=aliastypeparams #71665

@mitchlloyd

Description

@mitchlloyd

Go version

go version go1.23.6 darwin/arm64

Output of go env in your module/workspace:

GO111MODULE=''
GOARCH='arm64'
GOBIN='/Users/mitch/.local/share/mise/installs/go/1.23.6/bin'
GOCACHE='/Users/mitch/Library/Caches/go-build'
GOENV='/Users/mitch/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT='aliastypeparams'
GOFLAGS=''
GOHOSTARCH='arm64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/mitch/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='darwin'
GOPATH='/Users/mitch/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/Users/mitch/.local/share/mise/installs/go/1.23.6'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/Users/mitch/.local/share/mise/installs/go/1.23.6/pkg/tool/darwin_arm64'
GOVCS=''
GOVERSION='go1.23.6'
GODEBUG='gotypesalias=1'
GOTELEMETRY='local'
GOTELEMETRYDIR='/Users/mitch/Library/Application Support/go/telemetry'
GCCGO='gccgo'
GOARM64='v8.0'
AR='ar'
CC='clang'
CXX='clang++'
CGO_ENABLED='1'
GOMOD='/Users/mitch/projects/gotypealias/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/c0/m8wzsq5904s7bcn4qjh28qw80000gn/T/go-build1912046319=/tmp/go-build -gno-record-gcc-switches -fno-common'

What did you do?

I made a minimal go program (gotypealias.zip) with a test that imports a package containing a type alias.

// go.mod
module gotypealias

go 1.23.6
// main_test.go
package main

import (
	"gotypealias/pkg"
	"testing"
)

func TestXxx(t *testing.T) {
	t.Log(pkg.Hello())
}
// pkg/pkg.go
package pkg

func Hello() string {
	return "Hello"
}

type StructType[T any] struct{}

type Alias[T any] = StructType[T]

What did you see happen?

go test . -v
# gotypealias
# [gotypealias]
panic: runtime error: index out of range [0] with length 0 [recovered]
	panic: runtime error: index out of range [0] with length 0

goroutine 1 [running]:
go/types.(*Checker).handleBailout(0x140000056c0, 0x1400002d9d8)
	go/types/check.go:404 +0x9c
panic({0x1010e9bc0?, 0x14000000750?})
	runtime/panic.go:785 +0x124
go/internal/gcimporter.(*reader).doTyp(0x1400002c3f8)
	go/internal/gcimporter/ureader.go:308 +0x3f4
go/internal/gcimporter.(*pkgReader).typIdx(0x140000038c0, {0x10bebe0?, 0x1?}, 0x14000234360)
	go/internal/gcimporter/ureader.go:276 +0x150
go/internal/gcimporter.(*reader).typ(0x1400002c668)
	go/internal/gcimporter/ureader.go:246 +0x4c
go/internal/gcimporter.(*reader).obj(0x1400002c668)
	go/internal/gcimporter/ureader.go:438 +0xcc
go/internal/gcimporter.(*reader).doTyp(0x1400002c668)
	go/internal/gcimporter/ureader.go:299 +0x84
go/internal/gcimporter.(*pkgReader).typIdx(0x140000038c0, {0x2c?, 0x0?}, 0x14000234360)
	go/internal/gcimporter/ureader.go:276 +0x150
go/internal/gcimporter.(*reader).typ(0x1400002c900)
	go/internal/gcimporter/ureader.go:246 +0x4c
go/internal/gcimporter.(*pkgReader).objIdx(0x140000038c0, 0x0)
	go/internal/gcimporter/ureader.go:485 +0x7c8
go/internal/gcimporter.readUnifiedPackage(0x140001fd0c0, 0x0, 0x1400022a510, {0x1, 0x0, {0x14000011970, 0xf}, {0x140001d0e44, 0x174}, {0x140002260a0, ...}, ...})
	go/internal/gcimporter/ureader.go:75 +0x2cc
go/internal/gcimporter.Import(0x140001fd0c0, 0x1400022a510, {0x14000011970, 0xf}, {0x0?, 0x100d1ea14?}, 0x140001e7c00?)
	go/internal/gcimporter/gcimporter.go:240 +0x61c
go/importer.(*gcimports).ImportFrom(0x100f84050?, {0x14000011970?, 0x1010becc0?}, {0x0?, 0x1400002d038?}, 0x14000003560?)
	go/importer/importer.go:102 +0x4c
go/importer.(*gcimports).Import(0x1010b50c0?, {0x14000011970?, 0x140000006f1?})
	go/importer/importer.go:95 +0x2c
cmd/vendor/golang.org/x/tools/go/analysis/unitchecker.init.func1.2({0x140000006f1?, 0x11?})
	cmd/vendor/golang.org/x/tools/go/analysis/unitchecker/unitchecker.go:213 +0x6c
cmd/vendor/golang.org/x/tools/go/analysis/unitchecker.importerFunc.Import(0x101327520?, {0x140000006f1?, 0x140000006f1?})
	cmd/vendor/golang.org/x/tools/go/analysis/unitchecker/unitchecker.go:443 +0x30
go/types.(*Checker).importPackage(0x140000056c0, {0x101108ac0, 0x14000071440}, {0x140000006f1, 0xf}, {0x1400001ca80, 0x21})
	go/types/resolver.go:166 +0x458
go/types.(*Checker).collectObjects.func1({0x101108bc0?, 0x1400022a390})
	go/types/resolver.go:270 +0xd8
go/types.(*Checker).walkDecl(0x140000056c0, {0x10110ac10?, 0x140001fd100}, 0x1400002d8d8)
	go/types/decl.go:404 +0x218
go/types.(*Checker).walkDecls(...)
	go/types/decl.go:391
go/types.(*Checker).collectObjects(0x140000056c0)
	go/types/resolver.go:257 +0xb00
go/types.(*Checker).checkFiles(0x140000056c0, {0x1400005a890, 0x1, 0x1})
	go/types/check.go:456 +0x170
go/types.(*Checker).Files(0x14000011960?, {0x1400005a890?, 0x14000234120?, 0x0?})
	go/types/check.go:422 +0x80
go/types.(*Config).Check(0x140001da770, {0x14000011960?, 0x140000100a7?}, 0x140001fd0c0, {0x1400005a890, 0x1, 0x1}, 0x14000234060)
	go/types/api.go:476 +0x70
cmd/vendor/golang.org/x/tools/go/analysis/unitchecker.run(0x140001fd0c0, 0x1400018e2a0, {0x1400013fa00, 0xa, 0x0?})
	cmd/vendor/golang.org/x/tools/go/analysis/unitchecker/unitchecker.go:268 +0x348
cmd/vendor/golang.org/x/tools/go/analysis/unitchecker.Run({0x16f0eacb5?, 0x21?}, {0x1400013fa00, 0xa, 0x10})
	cmd/vendor/golang.org/x/tools/go/analysis/unitchecker/unitchecker.go:133 +0x90
cmd/vendor/golang.org/x/tools/go/analysis/unitchecker.Main({0x14000003200, 0x21, 0x21})
	cmd/vendor/golang.org/x/tools/go/analysis/unitchecker/unitchecker.go:120 +0x310
main.main()
	cmd/vet/main.go:54 +0x4e0
FAIL	gotypealias [build failed]
FAIL

What did you expect to see?

> go test . -v
=== RUN   TestXxx
    main_test.go:9: Hello
--- PASS: TestXxx (0.00s)
PASS
ok  	gotypealias	0.182s

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions