Skip to content

Commit 5c196b8

Browse files
committed
[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
1 parent ad02e9a commit 5c196b8

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

src/pkg/runtime/stack.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -856,7 +856,12 @@ runtime·newstack(void)
856856
void
857857
runtime·gostartcallfn(Gobuf *gobuf, FuncVal *fv)
858858
{
859-
runtime·gostartcall(gobuf, fv->fn, fv);
859+
void *fn;
860+
861+
fn = nil;
862+
if(fv != nil)
863+
fn = fv->fn;
864+
runtime·gostartcall(gobuf, fn, fv);
860865
}
861866

862867
// Maybe shrink the stack being used by gp.

test/fixedbugs/issue8047b.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// run
2+
3+
// Copyright 2014 The Go Authors. All rights reserved.
4+
// Use of this source code is governed by a BSD-style
5+
// license that can be found in the LICENSE file.
6+
7+
// Issue 8047. Defer setup during panic shouldn't crash for nil defer.
8+
9+
package main
10+
11+
func main() {
12+
defer func() {
13+
recover()
14+
}()
15+
f()
16+
}
17+
18+
func f() {
19+
var g func()
20+
defer g()
21+
panic(1)
22+
}

0 commit comments

Comments
 (0)