Skip to content
This repository has been archived by the owner on Jun 7, 2019. It is now read-only.

Commit

Permalink
cmd/compile: a dot expression can not be a struct literal key
Browse files Browse the repository at this point in the history
Passes toolstash -cmp.

Fixes golang#15311.

Change-Id: I1d67f5c9de38e899ab2d6c8986fabd6f197df23a
Reviewed-on: https://go-review.googlesource.com/22162
Reviewed-by: David Crawshaw <[email protected]>
  • Loading branch information
ianlancetaylor committed Apr 18, 2016
1 parent 95df0c6 commit f5423a6
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
7 changes: 6 additions & 1 deletion src/cmd/compile/internal/gc/typecheck.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
20 changes: 20 additions & 0 deletions test/fixedbugs/issue15311.go
Original file line number Diff line number Diff line change
@@ -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"
}

0 comments on commit f5423a6

Please sign in to comment.