+++ /dev/null
-// +build ignore
-
-package main
-
-// Test of value flow from panic() to recover().
-// We model them as stores/loads of a global location.
-// We ignore concrete panic types originating from the runtime.
-
-var someval int
-
-type myPanic struct{}
-
-func f(int) {}
-
-func g() string { return "" }
-
-func deadcode() {
- panic(123) // not reached
-}
-
-func main() {
- switch someval {
- case 0:
- panic("oops")
- case 1:
- panic(myPanic{})
- case 2:
- panic(f)
- case 3:
- panic(g)
- }
- ex := recover()
- print(ex) // @types myPanic | string | func(int) | func() string
- print(ex.(func(int))) // @pointsto main.f
- print(ex.(func() string)) // @pointsto main.g
-}