diff options
| author | Evan Kroske <evankroske@google.com> | 2014-10-06 17:16:39 -0400 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2014-10-06 17:16:39 -0400 |
| commit | 55df81d37f632e5f45f95b210f862c73a758b124 (patch) | |
| tree | 3d04828eb2af2f54102996a78076db957398d265 /src/cmd/gc | |
| parent | 1eea5caa30b33c4222f24f3cce995e2bae42659a (diff) | |
| download | go-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.c | 11 |
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; |
