mirror of
https://github.com/golang/go
synced 2024-11-23 23:50:08 -07:00
[dev.regabi] cmd/compile: fix latent Sym.SetPkgDef issue
Sym.pkgDefPtr is supposed to return a pointer to the types.Object variable currently holding the Sym's package-scope definition. However, in the case of identifiers that were shadowed in the current scope, it was incorrectly returning a pointer to a stack copy of the dclstack variable, rather than a pointer into the dclstack itself. This doesn't affect PkgDef, because it only reads from the variable, so it got the same result anyway. It also happens to not affect our usage of SetPkgDef today, because we currently only call SetPkgDef for the builtin/runtime.go symbols, and those are never shadowed. However, it does affect my upcoming CL to lazily create the ir.Names for imported objects, as that depends on the ability to use SetPkgDef to set shadowed identifiers. Passes buildall w/ toolstash -cmp. Change-Id: I54fc48b33da0670d31725faa1df1170a8730750a Reviewed-on: https://go-review.googlesource.com/c/go/+/277712 Trust: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
This commit is contained in:
parent
fea898a4b0
commit
9f16620f46
@ -94,7 +94,8 @@ func (s *Sym) SetPkgDef(n Object) {
|
||||
func (s *Sym) pkgDefPtr() *Object {
|
||||
// Look for outermost saved declaration, which must be the
|
||||
// package scope definition, if present.
|
||||
for _, d := range dclstack {
|
||||
for i := range dclstack {
|
||||
d := &dclstack[i]
|
||||
if s == d.sym {
|
||||
return &d.def
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user