Commit 55df81d3 authored by Evan Kroske's avatar Evan Kroske Committed by Russ Cox

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
parent 1eea5caa
......@@ -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;
......
......@@ -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
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment