mirror of
https://github.com/golang/go
synced 2024-09-06 00:19:45 +00:00
cmd/compile: use "N variables but M values" error for OAS
Makes the error message more consistent between OAS and OAS2. Fixes #26616. Change-Id: I07ab46c5ef8a37efb2cb557632697f5d1bf789f7 Reviewed-on: https://go-review.googlesource.com/131280 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
9c833831b2
commit
f7a633aa79
|
@ -3333,10 +3333,17 @@ func typecheckas(n *Node) {
|
|||
n.Left = typecheck(n.Left, Erv|Easgn)
|
||||
}
|
||||
|
||||
n.Right = typecheck(n.Right, Erv)
|
||||
// Use Efnstruct so we can emit an "N variables but M values" error
|
||||
// to be consistent with typecheckas2 (#26616).
|
||||
n.Right = typecheck(n.Right, Erv|Efnstruct)
|
||||
checkassign(n, n.Left)
|
||||
if n.Right != nil && n.Right.Type != nil {
|
||||
if n.Left.Type != nil {
|
||||
if n.Right.Type.IsFuncArgStruct() {
|
||||
yyerror("assignment mismatch: 1 variable but %d values", n.Right.Type.NumFields())
|
||||
// Multi-value RHS isn't actually valid for OAS; nil out
|
||||
// to indicate failed typechecking.
|
||||
n.Right.Type = nil
|
||||
} else if n.Left.Type != nil {
|
||||
n.Right = assignconv(n.Right, n.Left.Type, "assignment")
|
||||
}
|
||||
}
|
||||
|
|
20
test/fixedbugs/issue26616.go
Normal file
20
test/fixedbugs/issue26616.go
Normal file
|
@ -0,0 +1,20 @@
|
|||
// errorcheck
|
||||
|
||||
// Copyright 2018 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
|
||||
|
||||
var x int = three() // ERROR "1 variable but 3 values"
|
||||
|
||||
func f() {
|
||||
var _ int = three() // ERROR "1 variable but 3 values"
|
||||
var a int = three() // ERROR "1 variable but 3 values"
|
||||
a = three() // ERROR "1 variable but 3 values"
|
||||
b := three() // ERROR "1 variable but 3 values"
|
||||
|
||||
_, _ = a, b
|
||||
}
|
||||
|
||||
func three() (int, int, int)
|
Loading…
Reference in a new issue