Skip to content

x/tools/gopls: "file not found for pos = %d (%s)" crash in go/types  #69338

@adonovan

Description

@adonovan
#!stacks
"runtime.gopanic" && "go/types.(*Checker).fileFor:+11"

This stack vD1W8g was reported by telemetry:

// fileFor returns the *ast.File which contains the position pos.
// If there are no files, the result is nil.
// The position must be valid.
func (check *Checker) fileFor(pos token.Pos) *ast.File {
	assert(pos.IsValid())
	// Eval and CheckExpr tests may not have any source files.
	if len(check.files) == 0 {
		return nil
	}
	for _, file := range check.files {
		if file.FileStart <= pos && pos < file.FileEnd {
			return file
		}
	}
	panic(check.sprintf("file not found for pos = %d (%s)", int(pos), check.fset.Position(pos))) // <--- here
}

The root cause is #69477 in go/types.

crash/crash
runtime.gopanic:+69
go/types.(*Checker).handleBailout:+7
go/types.(*Checker).Files.deferwrap1:+0
runtime.gopanic:+50
go/types.(*Checker).fileFor:+11
go/types.(*Checker).allowVersion:+3
go/types.(*Checker).genericExprList:+21
go/types.(*Checker).callExpr:+127
go/types.(*Checker).exprInternal:+357
go/types.(*Checker).rawExpr:+10
go/types.(*Checker).multiExpr:+2
go/types.(*Checker).assignVars:+31
go/types.(*Checker).stmt:+116
go/types.(*Checker).simpleStmt:=99
go/types.(*Checker).stmt:+210
go/types.(*Checker).stmtList:+9
go/types.(*Checker).funcBody:+23
golang.org/x/tools/gopls@v0.16.1 go1.23.0 linux/amd64 vscode (2)

Issue created by golang.org/x/tools/gopls/internal/telemetry/cmd/stacks.

Dups: vEHlHQ rRko4w ipCG3g X0G-gQ YALHSA NQ7Z2w kShApw Y2vk_g

Metadata

Metadata

Assignees

Labels

NeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.ToolsThis label describes issues relating to any tools in the x/tools repository.goplsIssues related to the Go language server, gopls.gopls/telemetry-wins

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions