aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ssa/expand_calls.go
diff options
context:
space:
mode:
authorDavid Chase <drchase@google.com>2021-03-06 20:59:40 -0500
committerDavid Chase <drchase@google.com>2021-03-09 18:44:55 +0000
commit9f5298ca6e7fc9c46c0a82bd7be39450ec48dcb5 (patch)
tree235e6054f4bb649e073e91195d14c93fb0531d3c /src/cmd/compile/internal/ssa/expand_calls.go
parent98dfdc82c85c238a5ab6131d6f1e86e0da259851 (diff)
downloadgo-9f5298ca6e7fc9c46c0a82bd7be39450ec48dcb5.tar.gz
go-9f5298ca6e7fc9c46c0a82bd7be39450ec48dcb5.zip
cmd/compile: fix confusion in generating SelectN index
Old: return the ABI register index of the result (wrong!) New: return the index w/in sequence of result registers (right!) Fixed bug: genCaller0/genCaller0.go:43:9: internal compiler error: 'Caller0': panic during schedule while compiling Caller0: runtime error: index out of range [10] with length 9 Updates #44816. Change-Id: I1111e283658a2d6422986ae3d61bd95d1b9bde5e Reviewed-on: https://go-review.googlesource.com/c/go/+/299549 Trust: David Chase <drchase@google.com> Reviewed-by: Cherry Zhang <cherryyz@google.com>
Diffstat (limited to 'src/cmd/compile/internal/ssa/expand_calls.go')
-rw-r--r--src/cmd/compile/internal/ssa/expand_calls.go6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/ssa/expand_calls.go b/src/cmd/compile/internal/ssa/expand_calls.go
index d4fa7f2b14..d7d7d3bc45 100644
--- a/src/cmd/compile/internal/ssa/expand_calls.go
+++ b/src/cmd/compile/internal/ssa/expand_calls.go
@@ -424,7 +424,11 @@ func (x *expandState) rewriteSelect(leaf *Value, selector *Value, offset int64,
}
outParam := aux.abiInfo.OutParam(int(which))
if len(outParam.Registers) > 0 {
- reg := int64(outParam.Registers[regOffset])
+ firstReg := uint32(0)
+ for i := 0; i < int(which); i++ {
+ firstReg += uint32(len(aux.abiInfo.OutParam(i).Registers))
+ }
+ reg := int64(regOffset + Abi1RO(firstReg))
if leaf.Block == call.Block {
leaf.reset(OpSelectN)
leaf.SetArgs1(call0)