mirror of https://github.com/golang/go.git
cmd/compile: minor cleanup to HashDebugPos
HashDebugPos function/method included a parameter that was always the same, and a variable in the same package as the hashdebug code. So remove it. (I wrote that code, there was no reason for it to be that way). Also corrects a stale comment in the loopvar code. Change-Id: Id3da69cfe6dadeb31d5de62fb76d15103a5d6152 Reviewed-on: https://go-review.googlesource.com/c/go/+/482816 Run-TryBot: David Chase <drchase@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com>
This commit is contained in:
parent
46a49eb52e
commit
42866e566a
|
|
@ -208,8 +208,8 @@ func ParseFlags() {
|
||||||
// GOCOMPILEDEBUG=loopvarhash=... -- search for failure cause
|
// GOCOMPILEDEBUG=loopvarhash=... -- search for failure cause
|
||||||
//
|
//
|
||||||
// (*) For debugging purposes, providing loopvar flag >= 11 will expand the hash-eligible set of loops to all.
|
// (*) For debugging purposes, providing loopvar flag >= 11 will expand the hash-eligible set of loops to all.
|
||||||
// (**) Currently this applies to all code in the compilation of some_package, including
|
// (**) Loop semantics, changed or not, follow code from a package when it is inlined; that is, the behavior
|
||||||
// inlines from other packages that may have been compiled w/o the change.
|
// of an application compiled with partially modified loop semantics does not depend on inlining.
|
||||||
|
|
||||||
if Debug.LoopVarHash != "" {
|
if Debug.LoopVarHash != "" {
|
||||||
// This first little bit controls the inputs for debug-hash-matching.
|
// This first little bit controls the inputs for debug-hash-matching.
|
||||||
|
|
|
||||||
|
|
@ -138,6 +138,10 @@ func DebugHashMatch(pkgAndName string) bool {
|
||||||
return hashDebug.DebugHashMatch(pkgAndName)
|
return hashDebug.DebugHashMatch(pkgAndName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func DebugHashMatchPos(pos src.XPos) bool {
|
||||||
|
return hashDebug.DebugHashMatchPos(pos)
|
||||||
|
}
|
||||||
|
|
||||||
// HasDebugHash returns true if Flags.Gossahash is non-empty, which
|
// HasDebugHash returns true if Flags.Gossahash is non-empty, which
|
||||||
// results in hashDebug being not-nil. I.e., if !HasDebugHash(),
|
// results in hashDebug being not-nil. I.e., if !HasDebugHash(),
|
||||||
// there is no need to create the string for hashing and testing.
|
// there is no need to create the string for hashing and testing.
|
||||||
|
|
@ -317,7 +321,7 @@ func (d *HashDebug) DebugHashMatchParam(pkgAndName string, param uint64) bool {
|
||||||
// locking is also more frequent and more granular.
|
// locking is also more frequent and more granular.
|
||||||
// Note that the default answer for no environment variable (d == nil)
|
// Note that the default answer for no environment variable (d == nil)
|
||||||
// is "yes", do the thing.
|
// is "yes", do the thing.
|
||||||
func (d *HashDebug) DebugHashMatchPos(ctxt *obj.Link, pos src.XPos) bool {
|
func (d *HashDebug) DebugHashMatchPos(pos src.XPos) bool {
|
||||||
if d == nil {
|
if d == nil {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
@ -325,7 +329,7 @@ func (d *HashDebug) DebugHashMatchPos(ctxt *obj.Link, pos src.XPos) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
// Written this way to make inlining likely.
|
// Written this way to make inlining likely.
|
||||||
return d.debugHashMatchPos(ctxt, pos)
|
return d.debugHashMatchPos(Ctxt, pos)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *HashDebug) debugHashMatchPos(ctxt *obj.Link, pos src.XPos) bool {
|
func (d *HashDebug) debugHashMatchPos(ctxt *obj.Link, pos src.XPos) bool {
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ func ForCapture(fn *ir.Func) []*ir.Name {
|
||||||
// subject to hash-variable debugging.
|
// subject to hash-variable debugging.
|
||||||
maybeReplaceVar := func(k ir.Node, x *ir.RangeStmt) ir.Node {
|
maybeReplaceVar := func(k ir.Node, x *ir.RangeStmt) ir.Node {
|
||||||
if n, ok := k.(*ir.Name); ok && possiblyLeaked[n] {
|
if n, ok := k.(*ir.Name); ok && possiblyLeaked[n] {
|
||||||
if base.LoopVarHash.DebugHashMatchPos(base.Ctxt, n.Pos()) {
|
if base.LoopVarHash.DebugHashMatchPos(n.Pos()) {
|
||||||
// Rename the loop key, prefix body with assignment from loop key
|
// Rename the loop key, prefix body with assignment from loop key
|
||||||
transformed = append(transformed, n)
|
transformed = append(transformed, n)
|
||||||
tk := typecheck.Temp(n.Type())
|
tk := typecheck.Temp(n.Type())
|
||||||
|
|
@ -167,7 +167,7 @@ func ForCapture(fn *ir.Func) []*ir.Name {
|
||||||
forAllDefInInit(x, func(z ir.Node) {
|
forAllDefInInit(x, func(z ir.Node) {
|
||||||
if n, ok := z.(*ir.Name); ok && possiblyLeaked[n] {
|
if n, ok := z.(*ir.Name); ok && possiblyLeaked[n] {
|
||||||
// Hash on n.Pos() for most precise failure location.
|
// Hash on n.Pos() for most precise failure location.
|
||||||
if base.LoopVarHash.DebugHashMatchPos(base.Ctxt, n.Pos()) {
|
if base.LoopVarHash.DebugHashMatchPos(n.Pos()) {
|
||||||
leaked = append(leaked, n)
|
leaked = append(leaked, n)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -808,6 +808,5 @@ func (f *Func) useFMA(v *Value) bool {
|
||||||
if base.FmaHash == nil {
|
if base.FmaHash == nil {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
ctxt := v.Block.Func.Config.Ctxt()
|
return base.FmaHash.DebugHashMatchPos(v.Pos)
|
||||||
return base.FmaHash.DebugHashMatchPos(ctxt, v.Pos)
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue