Commit d79bb78a authored by Robert Griesemer's avatar Robert Griesemer

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/43811Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
parent 8f6d68eb
......@@ -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)
......
// 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"
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