-
Notifications
You must be signed in to change notification settings - Fork 18.4k
Closed
Labels
Description
What version of Go are you using (go version
)?
$ go version go version go1.17.6 darwin/arm64
Does this issue reproduce with the latest release?
Yes.
What operating system and processor architecture are you using (go env
)?
go env
Output
$ go env GO111MODULE="" GOARCH="arm64" GOBIN="" GOCACHE="/Users/oliver/Library/Caches/go-build" GOENV="/Users/oliver/Library/Application Support/go/env" GOEXE="" GOEXPERIMENT="" GOFLAGS="" GOHOSTARCH="arm64" GOHOSTOS="darwin" GOINSECURE="" GOMODCACHE="/Users/oliver/pkg/mod" GONOPROXY="" GONOSUMDB="" GOOS="darwin" GOPATH="/Users/oliver" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/Users/oliver/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/Users/oliver/go/pkg/tool/darwin_arm64" GOVCS="" GOVERSION="go1.17.6" GCCGO="gccgo" AR="ar" CC="clang" CXX="clang++" CGO_ENABLED="1" GOMOD="/Users/oliver/tmp/dict/go.mod" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/tg/tvt4qm6d71q6p6v6g8dgbwc00000gn/T/go-build160318427=/tmp/go-build -gno-record-gcc-switches -fno-common"
What did you do?
package main
import "fmt"
func main() {
d := make(map[string]string)
// I meant that to be:
// for k, v := range d { ... }
//
// But I didn't expect it to crash a build, but get an error.
for _, k, v := range d {
fmt.Println(k, v)
}
}
See code on Go Play.
What did you expect to see?
A proper build-time error.
What did you see instead?
A crash in the compiler:
$ go build
# dict.dev
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x2 addr=0x5c pc=0x104ca1da0]
goroutine 1 [running]:
cmd/compile/internal/types.(*Type).HasPointers(0x0)
/usr/local/go/src/cmd/compile/internal/types/type.go:1592 +0x20
cmd/compile/internal/escape.(*escape).exprSkipInit(0x140000ea1c0, {0x14000381030, 0x0, 0x0, 0x0, 0x0}, {0x10558f668, 0x14000406ea0})
/usr/local/go/src/cmd/compile/internal/escape/escape.go:584 +0x124
cmd/compile/internal/escape.(*escape).expr(0x140000ea1c0, {0x14000381030, 0x0, 0x0, 0x0, 0x0}, {0x10558f668, 0x14000406ea0})
/usr/local/go/src/cmd/compile/internal/escape/escape.go:566 +0x78
cmd/compile/internal/escape.(*escape).assignList(0x140000ea1c0, {0x140000ea060, 0x2, 0x2}, {0x140000ea040, 0x2, 0x2}, {0x1053613da, 0xb}, {0x10558dca0, ...})
/usr/local/go/src/cmd/compile/internal/escape/escape.go:972 +0x354
cmd/compile/internal/escape.(*escape).stmt(0x140000ea1c0, {0x10558dca0, 0x140000b0180})
/usr/local/go/src/cmd/compile/internal/escape/escape.go:508 +0xc74
cmd/compile/internal/escape.(*escape).stmts(0x140000ea1c0, {0x14000444100, 0xe, 0x10})
/usr/local/go/src/cmd/compile/internal/escape/escape.go:548 +0x74
cmd/compile/internal/escape.(*escape).stmt(0x140000ea1c0, {0x10558e088, 0x140000b2140})
/usr/local/go/src/cmd/compile/internal/escape/escape.go:400 +0x9f8
cmd/compile/internal/escape.(*escape).stmts(0x140000ea1c0, {0x1400005c140, 0x1, 0x1})
/usr/local/go/src/cmd/compile/internal/escape/escape.go:548 +0x74
cmd/compile/internal/escape.(*escape).block(...)
/usr/local/go/src/cmd/compile/internal/escape/escape.go:555
cmd/compile/internal/escape.(*escape).stmt(0x140000ea1c0, {0x10558f988, 0x14000404360})
/usr/local/go/src/cmd/compile/internal/escape/escape.go:457 +0x988
cmd/compile/internal/escape.(*escape).stmts(0x140000ea1c0, {0x14000068340, 0x2, 0x2})
/usr/local/go/src/cmd/compile/internal/escape/escape.go:548 +0x74
cmd/compile/internal/escape.(*escape).block(0x140000ea1c0, {0x14000068340, 0x2, 0x2})
/usr/local/go/src/cmd/compile/internal/escape/escape.go:555 +0x48
cmd/compile/internal/escape.(*batch).walkFunc(0x1400000a480, 0x14000400160)
/usr/local/go/src/cmd/compile/internal/escape/escape.go:307 +0x118
cmd/compile/internal/escape.Batch({0x140000ae070, 0x1, 0x1}, 0x0)
/usr/local/go/src/cmd/compile/internal/escape/escape.go:229 +0x1d4
cmd/compile/internal/ir.(*bottomUpVisitor).visit(0x14000098750, 0x14000400160)
/usr/local/go/src/cmd/compile/internal/ir/scc.go:128 +0x3a8
cmd/compile/internal/ir.VisitFuncsBottomUp({0x14000068360, 0x2, 0x2}, 0x10556a6c8)
/usr/local/go/src/cmd/compile/internal/ir/scc.go:60 +0x11c
cmd/compile/internal/escape.Funcs(...)
/usr/local/go/src/cmd/compile/internal/escape/escape.go:1821
cmd/compile/internal/gc.Main(0x10556a630)
/usr/local/go/src/cmd/compile/internal/gc/main.go:253 +0xef4
main.main()
/usr/local/go/src/cmd/compile/main.go:55 +0x144