mirror of
https://github.com/golang/go
synced 2025-05-02 02:51:41 +00:00
cmd/compile/internal/gc: add nil check for closure call on wasm
This commit adds an explicit nil check for closure calls on wasm, so calling a nil func causes a proper panic instead of crashing on the WebAssembly level. Change-Id: I6246844f316677976cdd420618be5664444c25ae Reviewed-on: https://go-review.googlesource.com/127759 Run-TryBot: Richard Musiol <neelance@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
committed by
Richard Musiol
parent
4fc7b93ad7
commit
81555cb4f3
@ -3515,6 +3515,10 @@ func (s *state) call(n *Node, k callKind) *ssa.Value {
|
||||
break
|
||||
}
|
||||
closure = s.expr(fn)
|
||||
if thearch.LinkArch.Family == sys.Wasm {
|
||||
// TODO(neelance): On other architectures this should be eliminated by the optimization steps
|
||||
s.nilCheck(closure)
|
||||
}
|
||||
case OCALLMETH:
|
||||
if fn.Op != ODOTMETH {
|
||||
Fatalf("OCALLMETH: n.Left not an ODOTMETH: %v", fn)
|
||||
|
21
test/closure4.go
Normal file
21
test/closure4.go
Normal file
@ -0,0 +1,21 @@
|
||||
// run
|
||||
|
||||
// Copyright 2018 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.
|
||||
|
||||
// Check that calling a nil func causes a proper panic.
|
||||
|
||||
package main
|
||||
|
||||
func main() {
|
||||
defer func() {
|
||||
err := recover()
|
||||
if err == nil {
|
||||
panic("panic expected")
|
||||
}
|
||||
}()
|
||||
|
||||
var f func()
|
||||
f()
|
||||
}
|
Reference in New Issue
Block a user