mirror of
https://github.com/golang/go
synced 2024-09-15 14:10:17 +00:00
cmd/compile: use correct line number for := (LCOLAS)
- use same local variable name (lno) for line number for LCOLAS everywhere - remove now unneeded assignment of line number to yylval.i in lexer Fix per suggestion of mdempsky. Fixes #13415. Change-Id: Ie3c7f5681615042a12b81b26724b3a5d8a979c25 Reviewed-on: https://go-review.googlesource.com/17248 Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
a0ea93dea5
commit
e18cd34c76
|
@ -1253,7 +1253,6 @@ l0:
|
||||||
c1 = getc()
|
c1 = getc()
|
||||||
if c1 == '=' {
|
if c1 == '=' {
|
||||||
c = int(LCOLAS)
|
c = int(LCOLAS)
|
||||||
yylval.i = int(lexlineno)
|
|
||||||
goto lx
|
goto lx
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -717,7 +717,7 @@ func (p *parser) simple_stmt(labelOk, rangeOk bool) *Node {
|
||||||
return stmt
|
return stmt
|
||||||
|
|
||||||
case LCOLAS:
|
case LCOLAS:
|
||||||
line := lineno
|
lno := lineno
|
||||||
p.next()
|
p.next()
|
||||||
|
|
||||||
if rangeOk && p.got(LRANGE) {
|
if rangeOk && p.got(LRANGE) {
|
||||||
|
@ -746,7 +746,7 @@ func (p *parser) simple_stmt(labelOk, rangeOk bool) *Node {
|
||||||
} // it's a colas, so must not re-use an oldname
|
} // it's a colas, so must not re-use an oldname
|
||||||
return ts
|
return ts
|
||||||
}
|
}
|
||||||
return colas(lhs, rhs, int32(line))
|
return colas(lhs, rhs, int32(lno))
|
||||||
|
|
||||||
default:
|
default:
|
||||||
p.syntax_error("expecting := or = or comma")
|
p.syntax_error("expecting := or = or comma")
|
||||||
|
@ -849,6 +849,7 @@ func (p *parser) case_(tswitch *Node) *Node {
|
||||||
|
|
||||||
case LCOLAS:
|
case LCOLAS:
|
||||||
// LCASE expr_or_type_list LCOLAS expr ':'
|
// LCASE expr_or_type_list LCOLAS expr ':'
|
||||||
|
lno := lineno
|
||||||
p.next()
|
p.next()
|
||||||
rhs := p.expr()
|
rhs := p.expr()
|
||||||
|
|
||||||
|
@ -857,7 +858,7 @@ func (p *parser) case_(tswitch *Node) *Node {
|
||||||
// done in casebody()
|
// done in casebody()
|
||||||
markdcl() // matching popdcl in caseblock
|
markdcl() // matching popdcl in caseblock
|
||||||
stmt := Nod(OXCASE, nil, nil)
|
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
|
p.want(':') // consume ':' after declaring select cases for correct lineno
|
||||||
return stmt
|
return stmt
|
||||||
|
|
19
test/fixedbugs/issue13415.go
Normal file
19
test/fixedbugs/issue13415.go
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
// 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
|
||||||
|
}():
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue