1
0
mirror of https://github.com/golang/go synced 2024-11-23 07:10:05 -07:00

cmd/compile: suppress errors after "cannot assign to X"

If the LHS is unassignable, there's no point in trying to make sure
the RHS can be assigned to it or making sure they're realizable
types. This is consistent with go/types.

In particular, this prevents "1 = 2" from causing a panic when "1"
still ends up with the type "untyped int", which is not realizable.

Fixes #20813.

Change-Id: I4710bdaac2e375ef12ec29b888b8ac84fb640e56
Reviewed-on: https://go-review.googlesource.com/46835
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
This commit is contained in:
Matthew Dempsky 2017-06-27 12:58:32 -07:00
parent ae238688d2
commit f62c608abb
2 changed files with 14 additions and 3 deletions

View File

@ -3288,10 +3288,10 @@ func checkassign(stmt *Node, n *Node) {
if n.Op == ODOT && n.Left.Op == OINDEXMAP {
yyerror("cannot assign to struct field %v in map", n)
return
} else {
yyerror("cannot assign to %v", n)
}
yyerror("cannot assign to %v", n)
n.Type = nil
}
func checkassignlist(stmt *Node, l Nodes) {

View File

@ -0,0 +1,11 @@
// errorcheck
// Copyright 2017 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.
package p
func f() {
1 = 2 // ERROR "cannot assign to 1"
}