mirror of
https://github.com/golang/go
synced 2024-09-05 07:54:46 +00:00
cmd/compile: report correct position in redeclaration errors
When restoring syms, we must also restore the original Lastlineno. Bug introduced with https://golang.org/cl/41390/. Fixes #20415. Change-Id: Ie81d36279d717e330951b52f42dcee4b0025b9f0 Reviewed-on: https://go-review.googlesource.com/43811 Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
8f6d68ebaa
commit
d79bb78a71
|
@ -22,6 +22,7 @@ func dcopy(a, b *Sym) {
|
|||
a.Name = b.Name
|
||||
a.Def = b.Def
|
||||
a.Block = b.Block
|
||||
a.Lastlineno = b.Lastlineno
|
||||
}
|
||||
|
||||
func push() *Sym {
|
||||
|
|
|
@ -18,15 +18,15 @@ import (
|
|||
// allows using Sym pointer equality to test for Go identifier uniqueness when
|
||||
// handling selector expressions.
|
||||
type Sym struct {
|
||||
Importdef *Pkg // where imported definition was found
|
||||
Linkname string // link name
|
||||
Lastlineno src.XPos // last declaration for diagnostic
|
||||
Importdef *Pkg // where imported definition was found
|
||||
Linkname string // link name
|
||||
|
||||
// saved and restored by dcopy
|
||||
Pkg *Pkg
|
||||
Name string // object name
|
||||
Def *Node // definition: ONAME OTYPE OPACK or OLITERAL
|
||||
Block int32 // blocknumber to catch redeclaration
|
||||
Pkg *Pkg
|
||||
Name string // object name
|
||||
Def *Node // definition: ONAME OTYPE OPACK or OLITERAL
|
||||
Block int32 // blocknumber to catch redeclaration
|
||||
Lastlineno src.XPos // last declaration for diagnostic
|
||||
|
||||
flags bitset8
|
||||
Label *Node // corresponding label (ephemeral)
|
||||
|
|
33
test/fixedbugs/issue20415.go
Normal file
33
test/fixedbugs/issue20415.go
Normal file
|
@ -0,0 +1,33 @@
|
|||
// errorcheck
|
||||
|
||||
// Copyright 2017 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.
|
||||
|
||||
// Make sure redeclaration errors report correct position.
|
||||
|
||||
package p
|
||||
|
||||
// 1
|
||||
var f byte
|
||||
|
||||
var f interface{} // ERROR "previous declaration at issue20415.go:12"
|
||||
|
||||
func _(f int) {
|
||||
}
|
||||
|
||||
// 2
|
||||
var g byte
|
||||
|
||||
func _(g int) {
|
||||
}
|
||||
|
||||
var g interface{} // ERROR "previous declaration at issue20415.go:20"
|
||||
|
||||
// 3
|
||||
func _(h int) {
|
||||
}
|
||||
|
||||
var h byte
|
||||
|
||||
var h interface{} // ERROR "previous declaration at issue20415.go:31"
|
Loading…
Reference in a new issue