1
0
mirror of https://github.com/golang/go synced 2024-11-26 03:57:57 -07:00

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
This commit is contained in:
Evan Kroske 2014-10-06 17:16:39 -04:00 committed by Russ Cox
parent 1eea5caa30
commit 55df81d37f
2 changed files with 23 additions and 0 deletions

View File

@ -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;

View File

@ -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
}
}