aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/panic.go
diff options
context:
space:
mode:
authorCherry Mui <cherryyz@google.com>2021-06-08 18:07:16 -0400
committerCherry Mui <cherryyz@google.com>2021-06-09 01:31:08 +0000
commitb20747334a4a3dee51759369a098ef2a0c9dbcff (patch)
tree2b2702a6796854a7b847f7e0379d90885778e521 /src/runtime/panic.go
parentc0a86c10f174dd1679974b48a085273d02803121 (diff)
downloadgo-b20747334a4a3dee51759369a098ef2a0c9dbcff.tar.xz
[dev.typeparams] cmd/compile, runtime: simplify opendefer metadata
Now that deferred functions are always argumentless, we don't need the metadata for the frame size, number of arguments, and the information about each argument. Change-Id: I99e75248a22bda6efbdf2012a2f35beca4c18fd7 Reviewed-on: https://go-review.googlesource.com/c/go/+/326061 Trust: Cherry Mui <cherryyz@google.com> Run-TryBot: Cherry Mui <cherryyz@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
Diffstat (limited to 'src/runtime/panic.go')
-rw-r--r--src/runtime/panic.go17
1 files changed, 2 insertions, 15 deletions
diff --git a/src/runtime/panic.go b/src/runtime/panic.go
index f6d72995b3..39013163b6 100644
--- a/src/runtime/panic.go
+++ b/src/runtime/panic.go
@@ -720,8 +720,7 @@ func addOneOpenDeferFrame(gp *g, pc uintptr, sp unsafe.Pointer) {
throw("missing deferreturn")
}
- maxargsize, _ := readvarintUnsafe(fd)
- d1 := newdefer(int32(maxargsize))
+ d1 := newdefer(0)
d1.openDefer = true
d1._panic = nil
// These are the pc/sp to set after we've
@@ -782,27 +781,15 @@ func runOpenDeferFrame(gp *g, d *_defer) bool {
done := true
fd := d.fd
- // Skip the maxargsize
- _, fd = readvarintUnsafe(fd)
deferBitsOffset, fd := readvarintUnsafe(fd)
nDefers, fd := readvarintUnsafe(fd)
deferBits := *(*uint8)(unsafe.Pointer(d.varp - uintptr(deferBitsOffset)))
for i := int(nDefers) - 1; i >= 0; i-- {
// read the funcdata info for this defer
- var argWidth, closureOffset, nArgs uint32
- argWidth, fd = readvarintUnsafe(fd)
+ var closureOffset uint32
closureOffset, fd = readvarintUnsafe(fd)
- nArgs, fd = readvarintUnsafe(fd)
- if argWidth != 0 || nArgs != 0 {
- throw("defer with non-empty frame")
- }
if deferBits&(1<<i) == 0 {
- for j := uint32(0); j < nArgs; j++ {
- _, fd = readvarintUnsafe(fd)
- _, fd = readvarintUnsafe(fd)
- _, fd = readvarintUnsafe(fd)
- }
continue
}
closure := *(*func())(unsafe.Pointer(d.varp - uintptr(closureOffset)))