mirror of
https://github.com/golang/go
synced 2024-09-04 23:44:16 +00:00
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:
parent
95df0c6ab9
commit
f5423a63df
|
@ -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
|
||||
|
|
20
test/fixedbugs/issue15311.go
Normal file
20
test/fixedbugs/issue15311.go
Normal 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"
|
||||
}
|
Loading…
Reference in a new issue