aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/mfinal.go
diff options
context:
space:
mode:
authorDmitri Shuralyov <dmitshur@google.com>2022-04-13 15:33:25 +0000
committerDmitri Shuralyov <dmitshur@google.com>2022-04-13 15:33:25 +0000
commited86dfc4e441ee7597586dd858fb87c987f1f3c8 (patch)
tree5a8bc12cf9f7ca932a82e4f8564b18ed928a93e9 /src/runtime/mfinal.go
parent4ea866a9969f4ff2ffd975116a17bbe01ce00469 (diff)
parent346b18ee9d15410ab08dd583787c64dbed0666d2 (diff)
downloadgo-ed86dfc4e441ee7597586dd858fb87c987f1f3c8.tar.gz
go-ed86dfc4e441ee7597586dd858fb87c987f1f3c8.zip
[dev.boringcrypto.go1.17] all: merge go1.17.9 into dev.boringcrypto.go1.17
Change-Id: I65c66a480c706b9bf453e7df68afdb7fc163f58b
Diffstat (limited to 'src/runtime/mfinal.go')
-rw-r--r--src/runtime/mfinal.go24
1 files changed, 9 insertions, 15 deletions
diff --git a/src/runtime/mfinal.go b/src/runtime/mfinal.go
index c134a0f22d..a6653032d7 100644
--- a/src/runtime/mfinal.go
+++ b/src/runtime/mfinal.go
@@ -187,21 +187,15 @@ func runfinq() {
f := &fb.fin[i-1]
var regs abi.RegArgs
- var framesz uintptr
- if argRegs > 0 {
- // The args can always be passed in registers if they're
- // available, because platforms we support always have no
- // argument registers available, or more than 2.
- //
- // But unfortunately because we can have an arbitrary
- // amount of returns and it would be complex to try and
- // figure out how many of those can get passed in registers,
- // just conservatively assume none of them do.
- framesz = f.nret
- } else {
- // Need to pass arguments on the stack too.
- framesz = unsafe.Sizeof((interface{})(nil)) + f.nret
- }
+ // The args may be passed in registers or on stack. Even for
+ // the register case, we still need the spill slots.
+ // TODO: revisit if we remove spill slots.
+ //
+ // Unfortunately because we can have an arbitrary
+ // amount of returns and it would be complex to try and
+ // figure out how many of those can get passed in registers,
+ // just conservatively assume none of them do.
+ framesz := unsafe.Sizeof((interface{})(nil)) + f.nret
if framecap < framesz {
// The frame does not contain pointers interesting for GC,
// all not yet finalized objects are stored in finq.