Commit 13290098 authored by Austin Clements's avatar Austin Clements

cmd/compile: ignore g register in liveness analysis

In rare circumstances that we don't yet fully understand, the g
register can be spilled to the stack and then reloaded. If this
happens, liveness analysis sees a pointer load into a
non-general-purpose register and panics.

We should fix the root cause of this, but fix the build for now by
ignoring pointer loads into the g register.

For #25504.

Change-Id: I0dfee1af9750c8e9157c7637280cdf07118ef2ca
Reviewed-on: https://go-review.googlesource.com/114081
Run-TryBot: Austin Clements <austin@google.com>
Reviewed-by: 's avatarKeith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent cfbf375a
......@@ -461,6 +461,17 @@ func (lv *Liveness) regEffects(v *ssa.Value) (uevar, kill liveRegMask) {
for _, reg := range regs[:nreg] {
if reg.GCNum() == -1 {
if ptrOnly {
if reg.String() == "g" {
// Issue #25504: Sometimes we
// spill and reload the g
// register, which this sees
// as a pointer load into the
// g register. The g register
// isn't a GP register and
// can't appear in register
// maps. Ignore it.
continue
}
v.Fatalf("pointer in non-pointer register %v", reg)
} else {
continue
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment