Skip to content

go/types: panic: unreachable #17716

Closed
Closed
@kevinburke

Description

@kevinburke

Please answer these questions before submitting your issue. Thanks!

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

go version devel +2d4d22a Mon Oct 31 23:53:50 2016 +0000 linux/amd64

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

$ go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/travis/gopath"
GORACE=""
GOROOT="/home/travis/.gimme/versions/go"
GOTOOLDIR="/home/travis/.gimme/versions/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build395845056=/tmp/go-build"
CXX="g++"
CGO_ENABLED="1"
PKG_CONFIG="pkg-config"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"

What did you do?

I ran go vet on my API client. A failing build can be found here: https://travis-ci.org/kevinburke/twilio-go/jobs/172067772

What did you expect to see?

I expected to see no output and a 0 return code, or a list of errors in the program.

What did you see instead?

A panic followed by a stack trace:

go vet ./...
panic: unreachable [recovered]
	panic: unreachable
goroutine 1 [running]:
panic(0x66ca60, 0xc42086a160)
	/home/travis/.gimme/versions/go/src/runtime/panic.go:531 +0x1cf
go/types.(*Checker).handleBailout(0xc4200a41c0, 0xc420417958)
	/home/travis/.gimme/versions/go/src/go/types/check.go:213 +0xa4
panic(0x66ca60, 0xc42086a160)
	/home/travis/.gimme/versions/go/src/runtime/panic.go:489 +0x2d3
go/types.unreachable()
	/home/travis/.gimme/versions/go/src/go/types/errors.go:23 +0x64
go/types.(*Checker).selector(0xc4200a41c0, 0xc420440500, 0xc4201d9620)
	/home/travis/.gimme/versions/go/src/go/types/call.go:321 +0x152e
go/types.(*Checker).typExprInternal(0xc4200a41c0, 0x7e0240, 0xc4201d9620, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc4203f4048)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:247 +0xad2
go/types.(*Checker).typExpr(0xc4200a41c0, 0x7e0240, 0xc4201d9620, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:145 +0x95
go/types.(*Checker).typ(0xc4200a41c0, 0x7e0240, 0xc4201d9620, 0x0, 0x1)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:153 +0x63
go/types.(*Checker).collectParams(0xc4200a41c0, 0xc420953270, 0xc4201c33b0, 0xc420953201, 0xc4203f4048, 0x1, 0x1, 0x0)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:421 +0x150
go/types.(*Checker).funcType(0xc4200a41c0, 0xc42094ce10, 0xc4201c3380, 0xc4201d99a0)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:162 +0x1f6
go/types.(*Checker).funcDecl(0xc4200a41c0, 0xc4200174f0, 0xc420017540)
	/home/travis/.gimme/versions/go/src/go/types/decl.go:322 +0xe8
go/types.(*Checker).objDecl(0xc4200a41c0, 0x7e2360, 0xc4200174f0, 0x0, 0x0, 0x0, 0x0)
	/home/travis/.gimme/versions/go/src/go/types/decl.go:87 +0x403
go/types.(*Checker).addMethodDecls(0xc4200a41c0, 0xc420016af0)
	/home/travis/.gimme/versions/go/src/go/types/decl.go:305 +0x587
go/types.(*Checker).typeDecl(0xc4200a41c0, 0xc420016af0, 0x7e0340, 0xc4201d8a40, 0x0, 0x0, 0x0, 0x0)
	/home/travis/.gimme/versions/go/src/go/types/decl.go:254 +0x1bd
go/types.(*Checker).objDecl(0xc4200a41c0, 0x7e25e0, 0xc420016af0, 0x0, 0x0, 0x0, 0x0)
	/home/travis/.gimme/versions/go/src/go/types/decl.go:84 +0x46d
go/types.(*Checker).ident(0xc4200a41c0, 0xc420440440, 0xc4201fda40, 0x0, 0x0, 0x0, 0x0)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:36 +0x153
go/types.(*Checker).typExprInternal(0xc4200a41c0, 0x7dff00, 0xc4201fda40, 0x0, 0x0, 0x0, 0x0, 0xc420036400, 0x2b51d63d74b0)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:230 +0x643
go/types.(*Checker).typExpr(0xc4200a41c0, 0x7dff00, 0xc4201fda40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:145 +0x95
go/types.(*Checker).typ(0xc4200a41c0, 0x7dff00, 0xc4201fda40, 0x6928e0, 0xc4204b4f48)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:153 +0x63
go/types.(*Checker).typExprInternal(0xc4200a41c0, 0x7e0300, 0xc4201fda60, 0x0, 0xc4203f4008, 0x1, 0x1, 0xc420416a30, 0xc420416aa0)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:289 +0x9df
go/types.(*Checker).typExpr(0xc4200a41c0, 0x7e0300, 0xc4201fda60, 0x0, 0xc4203f4008, 0x1, 0x1, 0x0, 0x0)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:145 +0x95
go/types.(*Checker).structType(0xc4200a41c0, 0xc42094cc90, 0xc4201fde40, 0xc4203f4008, 0x1, 0x1)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:661 +0x1e3
go/types.(*Checker).typExprInternal(0xc4200a41c0, 0x7e0340, 0xc4201fde40, 0xc42094cc60, 0xc4203f4008, 0x1, 0x1, 0xc420024801, 0xc42094cc60)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:283 +0x11c8
go/types.(*Checker).typExpr(0xc4200a41c0, 0x7e0340, 0xc4201fde40, 0xc42094cc60, 0xc4203f4008, 0x1, 0x1, 0x0, 0x0)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:145 +0x95
go/types.(*Checker).typeDecl(0xc4200a41c0, 0xc420402690, 0x7e0340, 0xc4201fde40, 0x0, 0x0, 0x0, 0x0)
	/home/travis/.gimme/versions/go/src/go/types/decl.go:232 +0x162
go/types.(*Checker).objDecl(0xc4200a41c0, 0x7e25e0, 0xc420402690, 0x0, 0x0, 0x0, 0x0)
	/home/travis/.gimme/versions/go/src/go/types/decl.go:84 +0x46d
go/types.(*Checker).ident(0xc4200a41c0, 0xc420440180, 0xc4201c69e0, 0x0, 0x0, 0x0, 0x0)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:36 +0x153
go/types.(*Checker).typExprInternal(0xc4200a41c0, 0x7dff00, 0xc4201c69e0, 0x0, 0x0, 0x0, 0x0, 0xc420036400, 0x2b51d63d74b0)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:230 +0x643
go/types.(*Checker).typExpr(0xc4200a41c0, 0x7dff00, 0xc4201c69e0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:145 +0x95
go/types.(*Checker).typ(0xc4200a41c0, 0x7dff00, 0xc4201c69e0, 0x6928e0, 0xc4201c6960)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:153 +0x63
go/types.(*Checker).typExprInternal(0xc4200a41c0, 0x7e0300, 0xc4201c6a00, 0x0, 0xc4204178a0, 0x1, 0x8, 0x0, 0xc4204174a0)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:289 +0x9df
go/types.(*Checker).typExpr(0xc4200a41c0, 0x7e0300, 0xc4201c6a00, 0x0, 0xc4204178a0, 0x1, 0x8, 0x0, 0x0)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:145 +0x95
go/types.(*Checker).structType(0xc4200a41c0, 0xc42094cc30, 0xc4201c6a20, 0xc4204178a0, 0x1, 0x8)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:661 +0x1e3
go/types.(*Checker).typExprInternal(0xc4200a41c0, 0x7e0340, 0xc4201c6a20, 0xc42094cc00, 0xc4204178a0, 0x1, 0x8, 0xc420024701, 0xc42094cc00)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:283 +0x11c8
go/types.(*Checker).typExpr(0xc4200a41c0, 0x7e0340, 0xc4201c6a20, 0xc42094cc00, 0xc4204178a0, 0x1, 0x8, 0x0, 0x0)
	/home/travis/.gimme/versions/go/src/go/types/typexpr.go:145 +0x95
go/types.(*Checker).typeDecl(0xc4200a41c0, 0xc420222b40, 0x7e0340, 0xc4201c6a20, 0x0, 0xc4204178a0, 0x0, 0x8)
	/home/travis/.gimme/versions/go/src/go/types/decl.go:232 +0x162
go/types.(*Checker).objDecl(0xc4200a41c0, 0x7e25e0, 0xc420222b40, 0x0, 0xc4204178a0, 0x0, 0x8)
	/home/travis/.gimme/versions/go/src/go/types/decl.go:84 +0x46d
go/types.(*Checker).packageObjects(0xc4200a41c0, 0xc42021a600, 0x11c, 0x130)
	/home/travis/.gimme/versions/go/src/go/types/resolver.go:428 +0x133
go/types.(*Checker).checkFiles(0xc4200a41c0, 0xc4202f2e00, 0x21, 0x40, 0x0, 0x0)
	/home/travis/.gimme/versions/go/src/go/types/check.go:227 +0xe4
go/types.(*Checker).Files(0xc4200a41c0, 0xc4202f2e00, 0x21, 0x40, 0xc4202f9dd0, 0xc4200b99d0)
	/home/travis/.gimme/versions/go/src/go/types/check.go:218 +0x49
go/types.(*Config).Check(0xc420301740, 0xc4200138a0, 0x6, 0xc420019840, 0xc4202f2e00, 0x21, 0x40, 0xc4202fcbe0, 0xc4200b9a50, 0xc4200b9a60, ...)
	/home/travis/.gimme/versions/go/src/go/types/api.go:344 +0x180
main.(*Package).check(0xc42001baa0, 0xc420019840, 0xc4202f2e00, 0x21, 0x40, 0xc4202f3000, 0x20)
	/home/travis/.gimme/versions/go/src/cmd/vet/types.go:76 +0x34f
main.doPackage(0x6c1614, 0x1, 0xc42000a250, 0x21, 0x23, 0x0, 0xffffffffffffffff)
	/home/travis/.gimme/versions/go/src/cmd/vet/main.go:339 +0x8e6
main.main()
	/home/travis/.gimme/versions/go/src/cmd/vet/main.go:247 +0x382
exit status 2
make: *** [vet] Error 1

I can reliably reproduce this error in Travis CI's build environment, but I have been unable to reproduce this problem otherwise. Running go vet ./... with the same library commit and Go commit SHA on darwin/amd64 runs just fine; I'm only able to reproduce the problem in Travis CI.

I also tried deleting all of the other code in the library, so only the token directory existed. If only the token directory exists, go vet passes.

To reproduce, check out the master branch on this project: https://github.com/kevinburke/twilio-go/ (specifically this commit: kevinburke/twilio-go@76f2274). Enable Travis-CI builds on your fork, then push a new commit. It should fail with the panic pasted above, after about 2 minutes. Note Travis builds tip against tip, the Go commit being built may change from under you if more commits are pushed to golang/go master.

I run a Ubuntu 16 server and tried to build Go tip on that machine to set up a reduced test case, but I'm getting an error when compiling Go tip. Someone on Gophers slack suggested it may be a memory problem; that machine has 850MB of free RAM. I can open a separate ticket for that issue if you'd like.

I tried searching for this stack trace elsewhere in Go issues and couldn't find anything, my apologies if this is a duplicate.

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.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions