Commit f62c608a authored by Matthew Dempsky's avatar Matthew Dempsky

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: 's avatarRobert Griesemer <gri@golang.org>
parent ae238688
......@@ -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) {
......
// 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"
}
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