cmd/compile: a dot expression can not be a struct literal key

Passes toolstash -cmp.

Fixes #15311.

Change-Id: I1d67f5c9de38e899ab2d6c8986fabd6f197df23a
Reviewed-on: https://go-review.googlesource.com/22162
Reviewed-by: David Crawshaw <crawshaw@golang.org>
This commit is contained in:
Ian Lance Taylor 2016-04-17 15:33:07 -07:00
parent 95df0c6ab9
commit f5423a63df
2 changed files with 26 additions and 1 deletions

View file

@ -3099,7 +3099,12 @@ func typecheckcomplit(n *Node) *Node {
}
s := l.Left.Sym
if s == nil {
// An OXDOT uses the Sym field to hold
// the field to the right of the dot,
// so s will be non-nil, but an OXDOT
// is never a valid struct literal key.
if s == nil || l.Left.Op == OXDOT {
Yyerror("invalid field name %v in struct initializer", l.Left)
l.Right = typecheck(l.Right, Erv)
continue

View file

@ -0,0 +1,20 @@
// errorcheck
// Copyright 2016 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.
// The compiler was failing to correctly report an error when a dot
// expression was used a struct literal key.
package p
type T struct {
toInt map[string]int
toString map[int]string
}
var t = T{
foo.toInt: make(map[string]int), // ERROR "field name"
bar.toString: make(map[int]string), // ERROR "field name"
}