From: smasher164 Date: Thu, 7 Feb 2019 08:38:21 +0000 (-0500) Subject: cmd/compile: return assignment mismatch error in var declarations X-Git-Tag: go1.13beta1~806 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=60736733ec988864c7cd91115e2761d6f6635df2;p=gostls13.git 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 Run-TryBot: Robert Griesemer --- diff --git a/src/cmd/compile/internal/gc/dcl.go b/src/cmd/compile/internal/gc/dcl.go index 9f25e5e15b..12875e798e 100644 --- a/src/cmd/compile/internal/gc/dcl.go +++ b/src/cmd/compile/internal/gc/dcl.go @@ -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 index 0000000000..8223c855cd --- /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" +}