mirror of https://github.com/golang/go.git
cmd/compile: better error when assigning to struct field in map
Identify this assignment case and instead of the more general error
prog.go:6: cannot assign to students["sally"].age
produce
prog.go:6: cannot directly assign to struct field students["sally"].age in map
that explains why the assignment is not possible.
Fixes #13779.
Change-Id: I90c10b445f907834fc1735aa66e44a0f447aa74f
Reviewed-on: https://go-review.googlesource.com/21462
Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
1f5b1b2b66
commit
f229e46783
|
|
@ -3207,6 +3207,11 @@ func checkassign(stmt *Node, n *Node) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if n.Op == ODOT && n.Left.Op == OINDEXMAP {
|
||||||
|
Yyerror("cannot directly assign to struct field %v in map", n)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
Yyerror("cannot assign to %v", n)
|
Yyerror("cannot assign to %v", n)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
// Issue 13779: provide better error message when directly assigning to struct field in map
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
type person struct{ age, weight, height int }
|
||||||
|
students := map[string]person{"sally": person{12, 50, 32}}
|
||||||
|
students["sally"].age = 3 // ERROR "cannot directly assign to struct field .* in map"
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue