Skip to content

Commit

Permalink
Revert "cmd/compile: make typenamesym do less work"
Browse files Browse the repository at this point in the history
This reverts commit 91433eb.

Reason for revert: broke deterministic build.

Fixes #19872.

Change-Id: Ia1a0fc651b818bdf69454df43bd189689c0348a0
Reviewed-on: https://go-review.googlesource.com/39871
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
  • Loading branch information
mdempsky committed Apr 7, 2017
1 parent 385c13c commit 19bd145
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 44 deletions.
60 changes: 18 additions & 42 deletions src/cmd/compile/internal/gc/reflect.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ type ptabEntry struct {
}

// runtime interface and reflection data structures
var signatlist = make(map[*Type]bool)
var signatlist []*Type
var itabs []itabEntry
var ptabs []ptabEntry

Expand Down Expand Up @@ -933,22 +933,24 @@ func typesymprefix(prefix string, t *Type) *Sym {

func typenamesym(t *Type) *Sym {
if t == nil || (t.IsPtr() && t.Elem() == nil) || t.IsUntyped() {
Fatalf("typenamesym %v", t)
Fatalf("typename %v", t)
}
s := typesym(t)
addsignat(t)
return s
}

func typename(t *Type) *Node {
s := typenamesym(t)
if s.Def == nil {
n := newnamel(src.NoXPos, s)
n.Type = Types[TUINT8]
n.Class = PEXTERN
n.Typecheck = 1
s.Def = n

signatlist = append(signatlist, t)
}

return s.Def.Sym
}

func typename(t *Type) *Node {
s := typenamesym(t)
n := nod(OADDR, s.Def, nil)
n.Type = typPtr(s.Def.Type)
n.SetAddable(true)
Expand Down Expand Up @@ -1415,35 +1417,21 @@ func itabsym(it *obj.LSym, offset int64) *obj.LSym {
return syms[methodnum]
}

func addsignat(t *Type) {
signatlist[t] = true
}

func dumptypestructs() {
// copy types from externdcl list to signatlist
for _, n := range externdcl {
if n.Op == OTYPE {
addsignat(n.Type)
signatlist = append(signatlist, n.Type)
}
}

// Process signatlist. Use a loop, as dtypesym adds
// entries to signatlist while it is being processed.
signats := make([]typeAndStr, len(signatlist))
for len(signatlist) > 0 {
signats = signats[:0]
// Transfer entries to a slice and sort, for reproducible builds.
for t := range signatlist {
signats = append(signats, typeAndStr{t: t, s: t.LongString()})
delete(signatlist, t)
}
sort.Sort(typesByLongString(signats))
for _, ts := range signats {
t := ts.t
dtypesym(t)
if t.Sym != nil {
dtypesym(typPtr(t))
}
// Process signatlist. This can't use range, as entries are
// added to the list while it is being processed.
for i := 0; i < len(signatlist); i++ {
t := signatlist[i]
dtypesym(t)
if t.Sym != nil {
dtypesym(typPtr(t))
}
}

Expand Down Expand Up @@ -1539,18 +1527,6 @@ func dumptypestructs() {
}
}

type typeAndStr struct {
t *Type
s string
}

// TODO(josharian): simplify this to just use Type.cmp once issue 19869 has been fixed.
type typesByLongString []typeAndStr

func (a typesByLongString) Len() int { return len(a) }
func (a typesByLongString) Less(i, j int) bool { return a[i].s < a[j].s }
func (a typesByLongString) Swap(i, j int) { a[i], a[j] = a[j], a[i] }

type pkgByPath []*Pkg

func (a pkgByPath) Len() int { return len(a) }
Expand Down
2 changes: 0 additions & 2 deletions src/cmd/compile/internal/gc/type.go
Original file line number Diff line number Diff line change
Expand Up @@ -976,8 +976,6 @@ func (r *Sym) cmpsym(s *Sym) ssa.Cmp {
// cmp compares two *Types t and x, returning ssa.CMPlt,
// ssa.CMPeq, ssa.CMPgt as t<x, t==x, t>x, for an arbitrary
// and optimizer-centric notion of comparison.
// TODO(josharian): make this safe for recursive interface types
// and use in signatlist sorting. See issue 19869.
func (t *Type) cmp(x *Type) ssa.Cmp {
// This follows the structure of eqtype in subr.go
// with two exceptions.
Expand Down

0 comments on commit 19bd145

Please sign in to comment.