Skip to content

Commit

Permalink
cmd/compile: use "N variables but M values" error for OAS
Browse files Browse the repository at this point in the history
Makes the error message more consistent between OAS and OAS2.

Fixes golang#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>
  • Loading branch information
mdempsky committed Sep 4, 2018
1 parent 9c83383 commit f7a633a
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 2 deletions.
11 changes: 9 additions & 2 deletions src/cmd/compile/internal/gc/typecheck.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
}
}
Expand Down
20 changes: 20 additions & 0 deletions test/fixedbugs/issue26616.go
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit f7a633a

Please sign in to comment.