]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: return assignment mismatch error in var declarations
authorsmasher164 <aindurti@gmail.com>
Thu, 7 Feb 2019 08:38:21 +0000 (03:38 -0500)
committerRobert Griesemer <gri@golang.org>
Wed, 3 Apr 2019 21:14:58 +0000 (21:14 +0000)
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>

src/cmd/compile/internal/gc/dcl.go
test/fixedbugs/issue30085.go [new file with mode: 0644]

index 9f25e5e15ba26f5afaea4b743dd5c67ca2d8ed12..12875e798eb9b4ce6e5dd51b32f529870fc85edc 100644 (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
 }
diff --git a/test/fixedbugs/issue30085.go b/test/fixedbugs/issue30085.go
new file mode 100644 (file)
index 0000000..8223c85
--- /dev/null
@@ -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"
+}