mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: make execution error panic values implement the Error interface
Make execution panics implement Error as mandated by https://golang.org/ref/spec#Run_time_panics, instead of panics with strings. Fixes #14965 Change-Id: I7827f898b9b9c08af541db922cc24fa0800ff18a Reviewed-on: https://go-review.googlesource.com/21214 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
824d8c10fe
commit
e4f1d9cf2e
7 changed files with 68 additions and 11 deletions
|
|
@ -273,6 +273,52 @@ func TestGoexitInPanic(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
// Issue 14965: Runtime panics should be of type runtime.Error
|
||||
func TestRuntimePanicWithRuntimeError(t *testing.T) {
|
||||
testCases := [...]func(){
|
||||
0: func() {
|
||||
var m map[uint64]bool
|
||||
m[1234] = true
|
||||
},
|
||||
1: func() {
|
||||
ch := make(chan struct{})
|
||||
close(ch)
|
||||
close(ch)
|
||||
},
|
||||
2: func() {
|
||||
var ch = make(chan struct{})
|
||||
close(ch)
|
||||
ch <- struct{}{}
|
||||
},
|
||||
3: func() {
|
||||
var s = make([]int, 2)
|
||||
_ = s[2]
|
||||
},
|
||||
4: func() {
|
||||
n := -1
|
||||
_ = make(chan bool, n)
|
||||
},
|
||||
5: func() {
|
||||
close((chan bool)(nil))
|
||||
},
|
||||
}
|
||||
|
||||
for i, fn := range testCases {
|
||||
got := panicValue(fn)
|
||||
if _, ok := got.(runtime.Error); !ok {
|
||||
t.Errorf("test #%d: recovered value %v(type %T) does not implement runtime.Error", i, got, got)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func panicValue(fn func()) (recovered interface{}) {
|
||||
defer func() {
|
||||
recovered = recover()
|
||||
}()
|
||||
fn()
|
||||
return
|
||||
}
|
||||
|
||||
func TestPanicAfterGoexit(t *testing.T) {
|
||||
// an uncaught panic should still work after goexit
|
||||
output := runTestProg(t, "testprog", "PanicAfterGoexit")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue