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>
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]
}
if len(el) != 0 {
- yyerror("extra expression in var declaration")
+ yyerror("assignment mismatch: %d variables but %d values", len(vl), nel)
}
return init
}
--- /dev/null
+// 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"
+}