aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/types/scope.go
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2020-12-13 20:17:09 -0800
committerMatthew Dempsky <mdempsky@google.com>2020-12-15 07:15:56 +0000
commit9f16620f46fc51ff1c8182b440bd60f97eb35278 (patch)
tree771644d806bab29748d7f6f4cd87d2f5a9f53024 /src/cmd/compile/internal/types/scope.go
parentfea898a4b0f02cee08ea978eb5ce541a85783690 (diff)
downloadgo-9f16620f46fc51ff1c8182b440bd60f97eb35278.tar.gz
go-9f16620f46fc51ff1c8182b440bd60f97eb35278.zip
[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>
Diffstat (limited to 'src/cmd/compile/internal/types/scope.go')
-rw-r--r--src/cmd/compile/internal/types/scope.go3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/types/scope.go b/src/cmd/compile/internal/types/scope.go
index 04ea3c325f..d46918f73d 100644
--- a/src/cmd/compile/internal/types/scope.go
+++ b/src/cmd/compile/internal/types/scope.go
@@ -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
}