cmd/compile: return assignment mismatch error in var declarations

Some var declarations return "extra expression" or "missing expression"
errors when they should return “assignment mismatch” instead. Change
the returned error messages to exhibit the desired behavior.

Fixes #30085.

Change-Id: I7189355fbb0f976d70100779db4f81a9ae64fb11
Reviewed-on: https://go-review.googlesource.com/c/go/+/161558
Reviewed-by: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
This commit is contained in:
smasher164 2019-02-07 03:38:21 -05:00 committed by Robert Griesemer
parent e9d1273997
commit 60736733ec
2 changed files with 15 additions and 2 deletions

View file

@ -166,11 +166,12 @@ func variter(vl []*Node, t *Node, el []*Node) []*Node {
return append(init, as2)
}
nel := len(el)
for _, v := range vl {
var e *Node
if doexpr {
if len(el) == 0 {
yyerror("missing expression in var declaration")
yyerror("assignment mismatch: %d variables but %d values", len(vl), nel)
break
}
e = el[0]
@ -194,7 +195,7 @@ func variter(vl []*Node, t *Node, el []*Node) []*Node {
}
if len(el) != 0 {
yyerror("extra expression in var declaration")
yyerror("assignment mismatch: %d variables but %d values", len(vl), nel)
}
return init
}

View file

@ -0,0 +1,12 @@
// errorcheck
// Copyright 2019 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 main
func main() {
var c, d = 1, 2, 3 // ERROR "assignment mismatch: 2 variables but 3 values"
var e, f, g = 1, 2 // ERROR "assignment mismatch: 3 variables but 2 values"
}