]> Cypherpunks repositories - gostls13.git/commit
cmd/compile: on Wasm and AIX, let deferred nil function panic at invocation
authorCherry Zhang <cherryyz@google.com>
Tue, 15 Oct 2019 21:51:32 +0000 (17:51 -0400)
committerCherry Zhang <cherryyz@google.com>
Wed, 16 Oct 2019 00:05:37 +0000 (00:05 +0000)
commitc4817f5d4f64f65d65fbd78145fb2bf8e80b6e5f
treef8e2a9844d11f18566209e7011c014e1ce5d7b79
parentdc37bd2ac92c2fe0aaef9f15ac3e4f747f2bf341
cmd/compile: on Wasm and AIX, let deferred nil function panic at invocation

The Go spec requires

If a deferred function value evaluates to nil, execution
panics when the function is invoked, not when the "defer"
statement is executed.

On Wasm and AIX, currently we actually emit a nil check at the
point of defer statement, which will make it panic too early.
This CL fixes this.

Also, on Wasm, now the nil function will be passed through
deferreturn to jmpdefer, which does an explicit nil check and
calls sigpanic if it is nil. This sigpanic, being called from
assembly, is ABI0. So change the assembler backend to also
handle sigpanic in ABI0.

Fixes #34926.
Updates #8047.

Change-Id: I28489a571cee36d2aef041f917b8cfdc31d557d4
Reviewed-on: https://go-review.googlesource.com/c/go/+/201297
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/compile/internal/gc/ssa.go
src/cmd/internal/obj/wasm/wasmobj.go
test/defernil.go [new file with mode: 0644]