diff options
author | Russ Cox <rsc@golang.org> | 2014-06-12 16:55:24 -0400 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2014-06-12 16:55:24 -0400 |
commit | 5c196b842a59bbb723005f1f84bfc29f687c79ba (patch) | |
tree | d64c980bc0f120a1ce943b4d3ab28512c2e6ab18 | |
parent | ad02e9ade52bf1e2cb5c24fb39a2869cecd57b40 (diff) | |
download | go-5c196b842a59bbb723005f1f84bfc29f687c79ba.tar.gz go-5c196b842a59bbb723005f1f84bfc29f687c79ba.zip |
[release-branch.go1.3] runtime: fix defer of nil func
««« CL 105140044 / c2832405e9b9
runtime: fix defer of nil func
Fixes #8047.
LGTM=r, iant
R=golang-codereviews, r, iant
CC=dvyukov, golang-codereviews, khr
https://golang.org/cl/105140044
»»»
LGTM=r
R=golang-codereviews, r
CC=adg, golang-codereviews, iant
https://golang.org/cl/103370044
-rw-r--r-- | src/pkg/runtime/stack.c | 7 | ||||
-rw-r--r-- | test/fixedbugs/issue8047b.go | 22 |
2 files changed, 28 insertions, 1 deletions
diff --git a/src/pkg/runtime/stack.c b/src/pkg/runtime/stack.c index 4b66e7dbaa..1f7c2eaada 100644 --- a/src/pkg/runtime/stack.c +++ b/src/pkg/runtime/stack.c @@ -856,7 +856,12 @@ runtime·newstack(void) void runtime·gostartcallfn(Gobuf *gobuf, FuncVal *fv) { - runtime·gostartcall(gobuf, fv->fn, fv); + void *fn; + + fn = nil; + if(fv != nil) + fn = fv->fn; + runtime·gostartcall(gobuf, fn, fv); } // Maybe shrink the stack being used by gp. diff --git a/test/fixedbugs/issue8047b.go b/test/fixedbugs/issue8047b.go new file mode 100644 index 0000000000..de6acaab59 --- /dev/null +++ b/test/fixedbugs/issue8047b.go @@ -0,0 +1,22 @@ +// run + +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Issue 8047. Defer setup during panic shouldn't crash for nil defer. + +package main + +func main() { + defer func() { + recover() + }() + f() +} + +func f() { + var g func() + defer g() + panic(1) +} |