1
0
mirror of https://github.com/golang/go synced 2024-11-26 08:27:56 -07:00

[dev.typeparams] cmd/compile: fix windows longtest builder

CL 332469 broke the Windows longtest builders, because it changed the
names assigned to autotmp variables that end up in export data.

The naming of autotmps doesn't actually matter, so instead we can just
hack iexport to write out "$autotmp" as a magic marker, and let the
reader replace it with an appropriate unique name. This is a little
hacky, but so is iexport's handling of autotmps already, and this
should also go away eventually with unified IR.

Change-Id: Ic17395337c745b66b9d63ee566299290214e6273
Reviewed-on: https://go-review.googlesource.com/c/go/+/333089
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
This commit is contained in:
Matthew Dempsky 2021-07-07 04:03:24 -07:00
parent 501725032c
commit c65ca97a45
2 changed files with 19 additions and 4 deletions

View File

@ -2116,8 +2116,15 @@ func (w *exportWriter) localIdent(s *types.Sym) {
return return
} }
// TODO(mdempsky): Fix autotmp hack. // The name of autotmp variables isn't important; they just need to
if i := strings.LastIndex(name, "."); i >= 0 && !strings.HasPrefix(name, ".autotmp_") && !strings.HasPrefix(name, ".dict") { // TODO: just use autotmp names for dictionaries? // be unique. To stabilize the export data, simply write out "$" as
// a marker and let the importer generate its own unique name.
if strings.HasPrefix(name, ".autotmp_") {
w.string("$autotmp")
return
}
if i := strings.LastIndex(name, "."); i >= 0 && !strings.HasPrefix(name, ".dict") { // TODO: just use autotmp names for dictionaries?
base.Fatalf("unexpected dot in identifier: %v", name) base.Fatalf("unexpected dot in identifier: %v", name)
} }

View File

@ -265,6 +265,7 @@ type importReader struct {
// Slice of all dcls for function, including any interior closures // Slice of all dcls for function, including any interior closures
allDcls []*ir.Name allDcls []*ir.Name
allClosureVars []*ir.Name allClosureVars []*ir.Name
autotmpgen int
} }
func (p *iimporter) newReader(off uint64, pkg *types.Pkg) *importReader { func (p *iimporter) newReader(off uint64, pkg *types.Pkg) *importReader {
@ -516,9 +517,16 @@ func (r *importReader) ident(selector bool) *types.Sym {
return nil return nil
} }
pkg := r.currPkg pkg := r.currPkg
if selector && types.IsExported(name) { if selector {
if types.IsExported(name) {
pkg = types.LocalPkg pkg = types.LocalPkg
} }
} else {
if name == "$autotmp" {
name = autotmpname(r.autotmpgen)
r.autotmpgen++
}
}
return pkg.Lookup(name) return pkg.Lookup(name)
} }