aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2014-06-12 16:55:24 -0400
committerRuss Cox <rsc@golang.org>2014-06-12 16:55:24 -0400
commit5c196b842a59bbb723005f1f84bfc29f687c79ba (patch)
treed64c980bc0f120a1ce943b4d3ab28512c2e6ab18
parentad02e9ade52bf1e2cb5c24fb39a2869cecd57b40 (diff)
downloadgo-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.c7
-rw-r--r--test/fixedbugs/issue8047b.go22
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)
+}