aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/panic.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2014-10-07 23:39:00 -0400
committerRuss Cox <rsc@golang.org>2014-10-07 23:39:00 -0400
commitf950a14bb555938cd3878dd59cc447026e1108b9 (patch)
tree6f5c2c39fc900997511da45ea12a24ec19e0656d /src/runtime/panic.go
parent2b1659b57d6e021029636ee39b4a30c4f9074c6c (diff)
downloadgo-f950a14bb555938cd3878dd59cc447026e1108b9.tar.xz
runtime: fix windows/amd64 build
Out of stack space due to new 2-word call in freedefer. Go back to smaller function calls. TBR=brainman CC=golang-codereviews https://golang.org/cl/152340043
Diffstat (limited to 'src/runtime/panic.go')
-rw-r--r--src/runtime/panic.go10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/runtime/panic.go b/src/runtime/panic.go
index c78102f8a3..58b14b09e3 100644
--- a/src/runtime/panic.go
+++ b/src/runtime/panic.go
@@ -189,8 +189,7 @@ func newdefer(siz int32) *_defer {
//go:nosplit
func freedefer(d *_defer) {
if d._panic != nil {
- // _panic must be cleared before d is unlinked from gp.
- gothrow("freedefer with d._panic != nil")
+ freedeferpanic()
}
sc := deferclass(uintptr(d.siz))
if sc < uintptr(len(p{}.deferpool)) {
@@ -203,6 +202,13 @@ func freedefer(d *_defer) {
}
}
+// Separate function so that it can split stack.
+// Windows otherwise runs out of stack space.
+func freedeferpanic() {
+ // _panic must be cleared before d is unlinked from gp.
+ gothrow("freedefer with d._panic != nil")
+}
+
// Run a deferred function if there is one.
// The compiler inserts a call to this at the end of any
// function which calls defer.