mirror of
https://github.com/golang/go
synced 2024-11-26 14:26:51 -07:00
cmd/compile: when GOSSAFUNC is set, dump the current pass on crash
When an SSA pass ICEs, it calls f.Fatalf, which terminates the compiler. When GOSSAFUNC is set, the current pass is not written to ssa.html. This CL makes it write ssa.html when it calls Fatalf, for the ease of debugging. Change-Id: I5d55e4258f0693d89c48c0a84984f2f893b0811d Reviewed-on: https://go-review.googlesource.com/c/go/+/307509 Trust: Cherry Zhang <cherryyz@google.com> Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com> Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
939b561a6e
commit
b345a306a0
@ -653,7 +653,19 @@ func (f *Func) Frontend() Frontend { return f.f
|
|||||||
func (f *Func) Warnl(pos src.XPos, msg string, args ...interface{}) { f.fe.Warnl(pos, msg, args...) }
|
func (f *Func) Warnl(pos src.XPos, msg string, args ...interface{}) { f.fe.Warnl(pos, msg, args...) }
|
||||||
func (f *Func) Logf(msg string, args ...interface{}) { f.fe.Logf(msg, args...) }
|
func (f *Func) Logf(msg string, args ...interface{}) { f.fe.Logf(msg, args...) }
|
||||||
func (f *Func) Log() bool { return f.fe.Log() }
|
func (f *Func) Log() bool { return f.fe.Log() }
|
||||||
func (f *Func) Fatalf(msg string, args ...interface{}) { f.fe.Fatalf(f.Entry.Pos, msg, args...) }
|
|
||||||
|
func (f *Func) Fatalf(msg string, args ...interface{}) {
|
||||||
|
stats := "crashed"
|
||||||
|
if f.Log() {
|
||||||
|
f.Logf(" pass %s end %s\n", f.pass.name, stats)
|
||||||
|
printFunc(f)
|
||||||
|
}
|
||||||
|
if f.HTMLWriter != nil {
|
||||||
|
f.HTMLWriter.WritePhase(f.pass.name, fmt.Sprintf("%s <span class=\"stats\">%s</span>", f.pass.name, stats))
|
||||||
|
f.HTMLWriter.flushPhases()
|
||||||
|
}
|
||||||
|
f.fe.Fatalf(f.Entry.Pos, msg, args...)
|
||||||
|
}
|
||||||
|
|
||||||
// postorder returns the reachable blocks in f in a postorder traversal.
|
// postorder returns the reachable blocks in f in a postorder traversal.
|
||||||
func (f *Func) postorder() []*Block {
|
func (f *Func) postorder() []*Block {
|
||||||
|
Loading…
Reference in New Issue
Block a user