diff options
| author | Austin Clements <austin@google.com> | 2021-04-06 13:35:48 -0400 |
|---|---|---|
| committer | Austin Clements <austin@google.com> | 2021-04-08 02:17:18 +0000 |
| commit | b675e52e9592ba3db1a3cf2dc9c4bc02c89e03a8 (patch) | |
| tree | 9caaf1b6ffc880af66b87c6598603d9087e17f17 /src/runtime/panic.go | |
| parent | 6304b401e4bcfc1d61dd687bb5b7df13fd71033b (diff) | |
| download | go-b675e52e9592ba3db1a3cf2dc9c4bc02c89e03a8.tar.xz | |
internal/goexperiment: consolidate experiment-enabled constants
Currently, we have boolean and integral constants for GOEXPERIMENTs in
various places. Consolidate these into automatically generated
constants in the internal/goexperiment package.
Change-Id: I42a49aba2a3b4c722fedea23a613162cd8a67bee
Reviewed-on: https://go-review.googlesource.com/c/go/+/307818
Trust: Austin Clements <austin@google.com>
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'src/runtime/panic.go')
| -rw-r--r-- | src/runtime/panic.go | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/runtime/panic.go b/src/runtime/panic.go index d33441a0d8..c437553012 100644 --- a/src/runtime/panic.go +++ b/src/runtime/panic.go @@ -6,6 +6,7 @@ package runtime import ( "internal/abi" + "internal/goexperiment" "runtime/internal/atomic" "runtime/internal/sys" "unsafe" @@ -228,7 +229,7 @@ func deferproc(siz int32, fn *funcval) { // arguments of fn follow fn throw("defer on system stack") } - if experimentRegabiDefer && siz != 0 { + if goexperiment.RegabiDefer && siz != 0 { // TODO: Make deferproc just take a func(). throw("defer with non-empty frame") } @@ -285,7 +286,7 @@ func deferprocStack(d *_defer) { // go code on the system stack can't defer throw("defer on system stack") } - if experimentRegabiDefer && d.siz != 0 { + if goexperiment.RegabiDefer && d.siz != 0 { throw("defer with non-empty frame") } // siz and fn are already set. @@ -387,8 +388,8 @@ func deferArgs(d *_defer) unsafe.Pointer { // that experiment, we should change the type of d.fn. //go:nosplit func deferFunc(d *_defer) func() { - if !experimentRegabiDefer { - throw("requires experimentRegabiDefer") + if !goexperiment.RegabiDefer { + throw("requires GOEXPERIMENT=regabidefer") } var fn func() *(**funcval)(unsafe.Pointer(&fn)) = d.fn @@ -648,7 +649,7 @@ func Goexit() { addOneOpenDeferFrame(gp, 0, nil) } } else { - if experimentRegabiDefer { + if goexperiment.RegabiDefer { // Save the pc/sp in deferCallSave(), so we can "recover" back to this // loop if necessary. deferCallSave(&p, deferFunc(d)) @@ -850,7 +851,7 @@ func runOpenDeferFrame(gp *g, d *_defer) bool { argWidth, fd = readvarintUnsafe(fd) closureOffset, fd = readvarintUnsafe(fd) nArgs, fd = readvarintUnsafe(fd) - if experimentRegabiDefer && argWidth != 0 { + if goexperiment.RegabiDefer && argWidth != 0 { throw("defer with non-empty frame") } if deferBits&(1<<i) == 0 { @@ -878,7 +879,7 @@ func runOpenDeferFrame(gp *g, d *_defer) bool { deferBits = deferBits &^ (1 << i) *(*uint8)(unsafe.Pointer(d.varp - uintptr(deferBitsOffset))) = deferBits p := d._panic - if experimentRegabiDefer { + if goexperiment.RegabiDefer { deferCallSave(p, deferFunc(d)) } else { reflectcallSave(p, unsafe.Pointer(closure), deferArgs, argWidth) @@ -906,8 +907,8 @@ 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 experimentRegabiDefer { - throw("not allowed with experimentRegabiDefer") + if goexperiment.RegabiDefer { + throw("not allowed with GOEXPERIMENT=regabidefer") } if p != nil { p.argp = unsafe.Pointer(getargp(0)) @@ -932,8 +933,8 @@ 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 !experimentRegabiDefer { - throw("only allowed with experimentRegabiDefer") + if !goexperiment.RegabiDefer { + throw("only allowed with GOEXPERIMENT=regabidefer") } if p != nil { p.argp = unsafe.Pointer(getargp(0)) @@ -1035,7 +1036,7 @@ func gopanic(e interface{}) { } else { p.argp = unsafe.Pointer(getargp(0)) - if experimentRegabiDefer { + if goexperiment.RegabiDefer { fn := deferFunc(d) fn() } else { |
