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:
parent
ae238688d2
commit
f62c608abb
@ -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) {
|
||||
|
11
test/fixedbugs/issue20813.go
Normal file
11
test/fixedbugs/issue20813.go
Normal 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"
|
||||
}
|
Loading…
Reference in New Issue
Block a user