aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/panic.go
diff options
context:
space:
mode:
authorCherry Mui <cherryyz@google.com>2021-06-04 13:53:18 -0400
committerCherry Mui <cherryyz@google.com>2021-06-08 17:03:39 +0000
commita9de78ac88ff668bbe8c0dc5fdc9dc864ae60447 (patch)
treee6bd20b2e564e70c12e9c8785b7773ea85c9a828 /src/runtime/panic.go
parente58bddde706c8814f82ec4ef404fc7ff36d88469 (diff)
downloadgo-a9de78ac88ff668bbe8c0dc5fdc9dc864ae60447.tar.xz
[dev.typeparams] cmd/compile, runtime: always enable defer/go wrapping
Hardwire regabidefers to true. Remove it from GOEXPERIMENTs. Fallback paths are not cleaned up in this CL. That will be done in later CLs. Change-Id: Iec1112a1e55d5f6ef70232a5ff6e702f649071c4 Reviewed-on: https://go-review.googlesource.com/c/go/+/325913 Trust: Cherry Mui <cherryyz@google.com> Run-TryBot: Cherry Mui <cherryyz@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Michael Knyszek <mknyszek@google.com> Reviewed-by: Than McIntosh <thanm@google.com>
Diffstat (limited to 'src/runtime/panic.go')
-rw-r--r--src/runtime/panic.go19
1 files changed, 9 insertions, 10 deletions
diff --git a/src/runtime/panic.go b/src/runtime/panic.go
index f6c38aafcc..e73d59c136 100644
--- a/src/runtime/panic.go
+++ b/src/runtime/panic.go
@@ -6,7 +6,6 @@ package runtime
import (
"internal/abi"
- "internal/goexperiment"
"runtime/internal/atomic"
"runtime/internal/sys"
"unsafe"
@@ -236,7 +235,7 @@ func deferproc(siz int32, fn *funcval) { // arguments of fn follow fn
throw("defer on system stack")
}
- if goexperiment.RegabiDefer && siz != 0 {
+ if true && siz != 0 {
// TODO: Make deferproc just take a func().
throw("defer with non-empty frame")
}
@@ -293,7 +292,7 @@ func deferprocStack(d *_defer) {
// go code on the system stack can't defer
throw("defer on system stack")
}
- if goexperiment.RegabiDefer && d.siz != 0 {
+ if true && d.siz != 0 {
throw("defer with non-empty frame")
}
// siz and fn are already set.
@@ -395,7 +394,7 @@ func deferArgs(d *_defer) unsafe.Pointer {
// that experiment, we should change the type of d.fn.
//go:nosplit
func deferFunc(d *_defer) func() {
- if !goexperiment.RegabiDefer {
+ if false {
throw("requires GOEXPERIMENT=regabidefer")
}
var fn func()
@@ -655,7 +654,7 @@ func Goexit() {
addOneOpenDeferFrame(gp, 0, nil)
}
} else {
- if goexperiment.RegabiDefer {
+ if true {
// Save the pc/sp in deferCallSave(), so we can "recover" back to this
// loop if necessary.
deferCallSave(&p, deferFunc(d))
@@ -857,7 +856,7 @@ func runOpenDeferFrame(gp *g, d *_defer) bool {
argWidth, fd = readvarintUnsafe(fd)
closureOffset, fd = readvarintUnsafe(fd)
nArgs, fd = readvarintUnsafe(fd)
- if goexperiment.RegabiDefer && argWidth != 0 {
+ if true && argWidth != 0 {
throw("defer with non-empty frame")
}
if deferBits&(1<<i) == 0 {
@@ -885,7 +884,7 @@ func runOpenDeferFrame(gp *g, d *_defer) bool {
deferBits = deferBits &^ (1 << i)
*(*uint8)(unsafe.Pointer(d.varp - uintptr(deferBitsOffset))) = deferBits
p := d._panic
- if goexperiment.RegabiDefer {
+ if true {
deferCallSave(p, deferFunc(d))
} else {
reflectcallSave(p, unsafe.Pointer(closure), deferArgs, argWidth)
@@ -913,7 +912,7 @@ func runOpenDeferFrame(gp *g, d *_defer) bool {
// This is marked as a wrapper by the compiler so it doesn't appear in
// tracebacks.
func reflectcallSave(p *_panic, fn, arg unsafe.Pointer, argsize uint32) {
- if goexperiment.RegabiDefer {
+ if true {
throw("not allowed with GOEXPERIMENT=regabidefer")
}
if p != nil {
@@ -939,7 +938,7 @@ func reflectcallSave(p *_panic, fn, arg unsafe.Pointer, argsize uint32) {
// This is marked as a wrapper by the compiler so it doesn't appear in
// tracebacks.
func deferCallSave(p *_panic, fn func()) {
- if !goexperiment.RegabiDefer {
+ if false {
throw("only allowed with GOEXPERIMENT=regabidefer")
}
if p != nil {
@@ -1042,7 +1041,7 @@ func gopanic(e interface{}) {
} else {
p.argp = unsafe.Pointer(getargp())
- if goexperiment.RegabiDefer {
+ if true {
fn := deferFunc(d)
fn()
} else {