return stmt
case LCOLAS:
- line := lineno
+ lno := lineno
p.next()
if rangeOk && p.got(LRANGE) {
} // it's a colas, so must not re-use an oldname
return ts
}
- return colas(lhs, rhs, int32(line))
+ return colas(lhs, rhs, int32(lno))
default:
p.syntax_error("expecting := or = or comma")
case LCOLAS:
// LCASE expr_or_type_list LCOLAS expr ':'
+ lno := lineno
p.next()
rhs := p.expr()
// done in casebody()
markdcl() // matching popdcl in caseblock
stmt := Nod(OXCASE, nil, nil)
- stmt.List = list1(colas(cases, list1(rhs), int32(p.op)))
+ stmt.List = list1(colas(cases, list1(rhs), int32(lno)))
p.want(':') // consume ':' after declaring select cases for correct lineno
return stmt
--- /dev/null
+// errorcheck
+
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Verify that error message regarding := appears on
+// correct line (and not on the line of the 2nd :=).
+
+package p
+
+func f() {
+ select {
+ case x, x := <-func() chan int { // ERROR "x repeated on left side of :="
+ c := make(chan int)
+ return c
+ }():
+ }
+}