go cmd/compile: 错误信息中的行号不正确,调用可变参数函数,

cl25kdpy  于 4个月前  发布在  Go
关注(0)|答案(3)|浏览(47)

编译:

package p

import git "gopkg.in/libgit2/git2go.v26"

func f(r *git.Repository, x int) {
	r.CreateCommit(
		"",
		nil,
		nil,
		"",
		nil,
		x,
	)
}

结果:

$ go build x.go
# command-line-arguments
./x.go:10:3: cannot use x (type int) as type *git.Commit in argument to r.CreateCommit

正确的行号是12,而不是10。第10行是第二个""行。
在至少以下版本中可以重现:1.7、1.8、1.9和1.10rc1。
@mdempsky@griesemer

xnifntxz

xnifntxz1#

感谢@josharian报告此bug!
有趣的是,这个bug仅在不匹配的元素是参数时触发。
例如,在https://play.golang.org/p/IeO4Zyw_8xq或内联显示以简洁起见

package main

type Repository int
type Signature int
type Oid int
type Tree int
type Commit int

func CreateCommit(
	refname string, author, committer *Signature,
	message string, tree *Tree, parents ...*Commit) (*Oid, error) {
	return nil, nil
}

func f1(x int) {
	CreateCommit(
		"",
		nil,
		nil,
		"",
		nil,
		x,
	)
}

func f2() {
	CreateCommit(
		"",
		nil,
		nil,
		"",
		nil,
		4,
	)
}

func main() {}

给出

请注意,对于第二个函数f2,位置正确打印,而对于f1它与您的报告相符?
希望这将有助于更轻松地预测和修复bug。

ev7lccsx

ev7lccsx2#

https://golang.org/cl/147379提到了这个问题:cmd/compile: Store original positions for Nodes elements

相关问题