diff options
| author | Keith Randall <khr@golang.org> | 2019-06-08 17:20:57 +0000 |
|---|---|---|
| committer | Keith Randall <khr@golang.org> | 2019-06-10 16:19:39 +0000 |
| commit | 8f296f59de0703b0559474beb434a265e277bdca (patch) | |
| tree | 4ffd97168a989aa958ef2055f07759f29a09210b /src/runtime/runtime2.go | |
| parent | daf944a531fecf2431b60da608e70680f4927412 (diff) | |
| download | go-8f296f59de0703b0559474beb434a265e277bdca.tar.xz | |
Revert "Revert "cmd/compile,runtime: allocate defer records on the stack""
This reverts CL 180761
Reason for revert: Reinstate the stack-allocated defer CL.
There was nothing wrong with the CL proper, but stack allocation of defers exposed two other issues.
Issue #32477: Fix has been submitted as CL 181258.
Issue #32498: Possible fix is CL 181377 (not submitted yet).
Change-Id: I32b3365d5026600069291b068bbba6cb15295eb3
Reviewed-on: https://go-review.googlesource.com/c/go/+/181378
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/runtime/runtime2.go')
| -rw-r--r-- | src/runtime/runtime2.go | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go index bc5b48222b..16c02cd1ed 100644 --- a/src/runtime/runtime2.go +++ b/src/runtime/runtime2.go @@ -775,9 +775,16 @@ func extendRandom(r []byte, n int) { // A _defer holds an entry on the list of deferred calls. // If you add a field here, add code to clear it in freedefer. +// This struct must match the code in cmd/compile/internal/gc/reflect.go:deferstruct +// and cmd/compile/internal/gc/ssa.go:(*state).call. +// Some defers will be allocated on the stack and some on the heap. +// All defers are logically part of the stack, so write barriers to +// initialize them are not required. All defers must be manually scanned, +// and for heap defers, marked. type _defer struct { - siz int32 + siz int32 // includes both arguments and results started bool + heap bool sp uintptr // sp at time of defer pc uintptr fn *funcval |
