Skip to content

x/tools/cmd/golsp: panic when running gopls query definition internal/lsp/cmd/definition.go:#1277 #30280

@mbana

Description

@mbana

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

$ go version
go version go1.11.5 linux/amd64

Does this issue reproduce with the latest release?

I also tried with go version go1.12rc1 darwin/amd64 and the issue seems to occur there as well.

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

go env Output
$ go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build711491476=/tmp/go-build -gno-record-gcc-switches"

What did you do?

Start Go Docker image:

$ docker run --rm -it golang:1.11-stretch

Inside Docker:

root@41d0e457e4e5:/go# ( \
    go get -u golang.org/x/tools/... && \
    cd ${GOPATH}/src/golang.org/x/tools && \
    # check usage
    golsp query definition || true && \
    echo '----' && \
    # check file exists
    find . -ipath './internal/lsp/cmd/definition.go' &&
    echo '----' && \
    gopls query definition 'internal/lsp/cmd/definition.go:#1277' \
)
...
definition: definition expects 1 argument
show declaration of selected identifier

Usage: definition [flags] <position>

Example: show the definition of the identifier at syntax at offset 1277 in this file (flag.FlagSet):

  $ gopls definition internal/lsp/cmd/definition.go:#1277

	gopls definition flags are:
----
./internal/lsp/cmd/definition.go
----
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x758334]

goroutine 1 [running]:
go/token.(*File).Pos(...)
	/usr/local/go/src/go/token/position.go:251
golang.org/x/tools/internal/lsp/cmd.(*definition).Run(0xc0000fa0d0, 0x8b72a0, 0xc000016090, 0xc000010130, 0x1, 0x1, 0x0, 0x0)
	/go/src/golang.org/x/tools/internal/lsp/cmd/definition.go:69 +0x254
golang.org/x/tools/internal/tool.Main.func2(0x0, 0x8b76e0, 0xc0000fa0d0, 0x8b72a0, 0xc000016090, 0xc0000dc900, 0x0, 0x0)
	/go/src/golang.org/x/tools/internal/tool/tool.go:130 +0xb6
golang.org/x/tools/internal/tool.Main(0x8b72a0, 0xc000016090, 0x8b76e0, 0xc0000fa0d0, 0xc000010130, 0x1, 0x1)
	/go/src/golang.org/x/tools/internal/tool/tool.go:131 +0x250
golang.org/x/tools/internal/lsp/cmd.(*query).Run(0xc0000f6b40, 0x8b72a0, 0xc000016090, 0xc000010130, 0x2, 0x2, 0x0, 0x0)
	/go/src/golang.org/x/tools/internal/lsp/cmd/query.go:59 +0x26c
golang.org/x/tools/internal/tool.Main.func2(0x0, 0x8b7720, 0xc0000f6b40, 0x8b72a0, 0xc000016090, 0xc0000dc8a0, 0x0, 0x0)
	/go/src/golang.org/x/tools/internal/tool/tool.go:130 +0xb6
golang.org/x/tools/internal/tool.Main(0x8b72a0, 0xc000016090, 0x8b7720, 0xc0000f6b40, 0xc000010120, 0x2, 0x2)
	/go/src/golang.org/x/tools/internal/tool/tool.go:131 +0x250
golang.org/x/tools/internal/lsp/cmd.(*Application).Run(0xc000126200, 0x8b72a0, 0xc000016090, 0xc000010120, 0x3, 0x2, 0x0, 0x0)
	/go/src/golang.org/x/tools/internal/lsp/cmd/cmd.go:90 +0x2f3
golang.org/x/tools/internal/tool.Main.func2(0xc000126200, 0x8b7660, 0xc000126200, 0x8b72a0, 0xc000016090, 0xc0000dc840, 0x0, 0x0)
	/go/src/golang.org/x/tools/internal/tool/tool.go:130 +0xb6
golang.org/x/tools/internal/tool.Main(0x8b72a0, 0xc000016090, 0x8b7660, 0xc000126200, 0xc000010110, 0x3, 0x3)
	/go/src/golang.org/x/tools/internal/tool/tool.go:131 +0x250
main.main()
	/go/src/golang.org/x/tools/cmd/gopls/main.go:20 +0xb0
root@41d0e457e4e5:/go# 

What did you expect to see?

The definition of the identifier.

What did you see instead?

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x758334]

goroutine 1 [running]:
go/token.(*File).Pos(...)
	/usr/local/go/src/go/token/position.go:251
golang.org/x/tools/internal/lsp/cmd.(*definition).Run(0xc0000fa0d0, 0x8b72a0, 0xc000016090, 0xc000010130, 0x1, 0x1, 0x0, 0x0)
	/go/src/golang.org/x/tools/internal/lsp/cmd/definition.go:69 +0x254
golang.org/x/tools/internal/tool.Main.func2(0x0, 0x8b76e0, 0xc0000fa0d0, 0x8b72a0, 0xc000016090, 0xc0000dc900, 0x0, 0x0)
	/go/src/golang.org/x/tools/internal/tool/tool.go:130 +0xb6
golang.org/x/tools/internal/tool.Main(0x8b72a0, 0xc000016090, 0x8b76e0, 0xc0000fa0d0, 0xc000010130, 0x1, 0x1)
	/go/src/golang.org/x/tools/internal/tool/tool.go:131 +0x250
golang.org/x/tools/internal/lsp/cmd.(*query).Run(0xc0000f6b40, 0x8b72a0, 0xc000016090, 0xc000010130, 0x2, 0x2, 0x0, 0x0)
	/go/src/golang.org/x/tools/internal/lsp/cmd/query.go:59 +0x26c
golang.org/x/tools/internal/tool.Main.func2(0x0, 0x8b7720, 0xc0000f6b40, 0x8b72a0, 0xc000016090, 0xc0000dc8a0, 0x0, 0x0)
	/go/src/golang.org/x/tools/internal/tool/tool.go:130 +0xb6
golang.org/x/tools/internal/tool.Main(0x8b72a0, 0xc000016090, 0x8b7720, 0xc0000f6b40, 0xc000010120, 0x2, 0x2)
	/go/src/golang.org/x/tools/internal/tool/tool.go:131 +0x250
golang.org/x/tools/internal/lsp/cmd.(*Application).Run(0xc000126200, 0x8b72a0, 0xc000016090, 0xc000010120, 0x3, 0x2, 0x0, 0x0)
	/go/src/golang.org/x/tools/internal/lsp/cmd/cmd.go:90 +0x2f3
golang.org/x/tools/internal/tool.Main.func2(0xc000126200, 0x8b7660, 0xc000126200, 0x8b72a0, 0xc000016090, 0xc0000dc840, 0x0, 0x0)
	/go/src/golang.org/x/tools/internal/tool/tool.go:130 +0xb6
golang.org/x/tools/internal/tool.Main(0x8b72a0, 0xc000016090, 0x8b7660, 0xc000126200, 0xc000010110, 0x3, 0x3)
	/go/src/golang.org/x/tools/internal/tool/tool.go:131 +0x250
main.main()
	/go/src/golang.org/x/tools/cmd/gopls/main.go:20 +0xb0

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