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>
diff --git a/src/cmd/compile/internal/gc/dcl.go b/src/cmd/compile/internal/gc/dcl.go
index 9f25e5e..12875e7 100644
--- a/src/cmd/compile/internal/gc/dcl.go
+++ b/src/cmd/compile/internal/gc/dcl.go
@@ -166,11 +166,12 @@
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 @@
}
if len(el) != 0 {
- yyerror("extra expression in var declaration")
+ yyerror("assignment mismatch: %d variables but %d values", len(vl), nel)
}
return init
}
diff --git a/test/fixedbugs/issue30085.go b/test/fixedbugs/issue30085.go
new file mode 100644
index 0000000..8223c85
--- /dev/null
+++ b/test/fixedbugs/issue30085.go
@@ -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"
+}