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
This commit is contained in:
Russ Cox 2014-06-12 16:34:36 -04:00
parent 83c8140662
commit 36207a91d3
2 changed files with 28 additions and 1 deletions

View file

@ -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.

View file

@ -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)
}