From: Keith Randall Date: Mon, 10 Dec 2018 22:19:33 +0000 (-0800) Subject: cmd/compile: set correct line number for method wrappers X-Git-Tag: go1.12beta1~118 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=f64385b720e59d0cddfe5e05e830665f6ade8083;p=gostls13.git cmd/compile: set correct line number for method wrappers When converting a method to a function, like this: type T ... func (t T) foo() { } var t T f := t.foo We need to build a wrapper function for the partially evaluated method. Currently that wrapper function gets the line number of the first place where t.foo appears. Instead it should have the line number of where foo is declared. Fixes #26839 Change-Id: I7dbe2094e53d5d336f329273f10f8430e0af544e Reviewed-on: https://go-review.googlesource.com/c/153498 Run-TryBot: Keith Randall Reviewed-by: Robert Griesemer --- diff --git a/src/cmd/compile/internal/gc/closure.go b/src/cmd/compile/internal/gc/closure.go index 07064415f4..f6b492a16f 100644 --- a/src/cmd/compile/internal/gc/closure.go +++ b/src/cmd/compile/internal/gc/closure.go @@ -434,8 +434,15 @@ func makepartialcall(fn *Node, t0 *types.Type, meth *types.Sym) *Node { sym.SetUniq(true) savecurfn := Curfn + saveLineNo := lineno Curfn = nil + // Set line number equal to the line number where the method is declared. + var m *types.Field + if lookdot0(meth, rcvrtype, &m, false) == 1 { + lineno = m.Pos + } + tfn := nod(OTFUNC, nil, nil) tfn.List.Set(structargs(t0.Params(), true)) tfn.Rlist.Set(structargs(t0.Results(), false)) @@ -482,6 +489,7 @@ func makepartialcall(fn *Node, t0 *types.Type, meth *types.Sym) *Node { sym.Def = asTypesNode(xfunc) xtop = append(xtop, xfunc) Curfn = savecurfn + lineno = saveLineNo return xfunc }