From 363bcd7b4f628f140f7942f2610a15ed142aa82d Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Tue, 13 Mar 2018 13:11:09 -0700 Subject: [PATCH] cmd/compile: use key position for key:val elements in composite literals Fixes #24339. Change-Id: Ie47764fed27f76b480834b1fdbed0512c94831d9 Reviewed-on: https://go-review.googlesource.com/100457 Run-TryBot: Robert Griesemer TryBot-Result: Gobot Gobot Reviewed-by: Matthew Dempsky --- src/cmd/compile/internal/gc/noder.go | 3 ++- test/fixedbugs/issue24339.go | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 test/fixedbugs/issue24339.go diff --git a/src/cmd/compile/internal/gc/noder.go b/src/cmd/compile/internal/gc/noder.go index fc6c5587df..1d491d2acc 100644 --- a/src/cmd/compile/internal/gc/noder.go +++ b/src/cmd/compile/internal/gc/noder.go @@ -569,7 +569,8 @@ func (p *noder) expr(expr syntax.Expr) *Node { lineno = p.makeXPos(expr.Rbrace) return n case *syntax.KeyValueExpr: - return p.nod(expr, OKEY, p.expr(expr.Key), p.wrapname(expr.Value, p.expr(expr.Value))) + // use position of expr.Key rather than of expr (which has position of ':') + return p.nod(expr.Key, OKEY, p.expr(expr.Key), p.wrapname(expr.Value, p.expr(expr.Value))) case *syntax.FuncLit: return p.funcLit(expr) case *syntax.ParenExpr: diff --git a/test/fixedbugs/issue24339.go b/test/fixedbugs/issue24339.go new file mode 100644 index 0000000000..0670becdfe --- /dev/null +++ b/test/fixedbugs/issue24339.go @@ -0,0 +1,20 @@ +// errorcheck + +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package p + +// Use a diffent line number for each token so we can +// check that the error message appears at the correct +// position. +var _ = struct{}{ /*line :20:1*/foo /*line :21:1*/: /*line :22:1*/0 } + + + + + + + +// ERROR "unknown field 'foo'" \ No newline at end of file