Commit 60736733 authored by smasher164's avatar smasher164 Committed by Robert Griesemer

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/+/161558Reviewed-by: default avatarRobert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
parent e9d12739
......@@ -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
}
......
// 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"
}
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