From 55df81d37f632e5f45f95b210f862c73a758b124 Mon Sep 17 00:00:00 2001 From: Evan Kroske Date: Mon, 6 Oct 2014 17:16:39 -0400 Subject: [PATCH] cmd/gc: prohibit short variable declarations containing duplicate symbols Fixes #6764. Fixes #8435. LGTM=rsc R=golang-codereviews, r, gobot, rsc CC=golang-codereviews https://golang.org/cl/116440046 --- src/cmd/gc/dcl.c | 11 +++++++++++ test/assign.go | 12 ++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/cmd/gc/dcl.c b/src/cmd/gc/dcl.c index 73c2581beb..cc010d901c 100644 --- a/src/cmd/gc/dcl.c +++ b/src/cmd/gc/dcl.c @@ -488,6 +488,10 @@ colasdefn(NodeList *left, Node *defn) NodeList *l; Node *n; + for(l=left; l; l=l->next) + if(l->n->sym != S) + l->n->sym->flags |= SymUniq; + nnew = 0; nerr = 0; for(l=left; l; l=l->next) { @@ -499,6 +503,13 @@ colasdefn(NodeList *left, Node *defn) nerr++; continue; } + if((n->sym->flags & SymUniq) == 0) { + yyerrorl(defn->lineno, "%S repeated on left side of :=", n->sym); + n->diag++; + nerr++; + continue; + } + n->sym->flags &= ~SymUniq; if(n->sym->block == block) continue; diff --git a/test/assign.go b/test/assign.go index da0192f838..6611f8ce3e 100644 --- a/test/assign.go +++ b/test/assign.go @@ -53,4 +53,16 @@ func main() { _ = x _ = y } + { + var x = 1 + { + x, x := 2, 3 // ERROR "x repeated on left side of :=" + _ = x + } + _ = x + } + { + a, a := 1, 2 // ERROR "a repeated on left side of :=" + _ = a + } }