aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/gc
diff options
context:
space:
mode:
authorEvan Kroske <evankroske@google.com>2014-10-06 17:16:39 -0400
committerRuss Cox <rsc@golang.org>2014-10-06 17:16:39 -0400
commit55df81d37f632e5f45f95b210f862c73a758b124 (patch)
tree3d04828eb2af2f54102996a78076db957398d265 /src/cmd/gc
parent1eea5caa30b33c4222f24f3cce995e2bae42659a (diff)
downloadgo-55df81d37f632e5f45f95b210f862c73a758b124.tar.xz
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
Diffstat (limited to 'src/cmd/gc')
-rw-r--r--src/cmd/gc/dcl.c11
1 files changed, 11 insertions, 0 deletions
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;