diff options
author | David Chase <drchase@google.com> | 2021-03-06 20:59:40 -0500 |
---|---|---|
committer | David Chase <drchase@google.com> | 2021-03-09 18:44:55 +0000 |
commit | 9f5298ca6e7fc9c46c0a82bd7be39450ec48dcb5 (patch) | |
tree | 235e6054f4bb649e073e91195d14c93fb0531d3c /src/cmd/compile/internal/ssa/expand_calls.go | |
parent | 98dfdc82c85c238a5ab6131d6f1e86e0da259851 (diff) | |
download | go-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.go | 6 |
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) |