Commit f5423a63 authored by Ian Lance Taylor's avatar Ian Lance Taylor

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/22162Reviewed-by: 's avatarDavid Crawshaw <crawshaw@golang.org>
parent 95df0c6a
......@@ -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
......
// 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"
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment