+++ /dev/null
-package main
-
-// Tests of defer. (Deferred recover() belongs is recover.go.)
-
-import "fmt"
-
-func deferMutatesResults(noArgReturn bool) (a, b int) {
- defer func() {
- if a != 1 || b != 2 {
- panic(fmt.Sprint(a, b))
- }
- a, b = 3, 4
- }()
- if noArgReturn {
- a, b = 1, 2
- return
- }
- return 1, 2
-}
-
-func init() {
- a, b := deferMutatesResults(true)
- if a != 3 || b != 4 {
- panic(fmt.Sprint(a, b))
- }
- a, b = deferMutatesResults(false)
- if a != 3 || b != 4 {
- panic(fmt.Sprint(a, b))
- }
-}
-
-// We concatenate init blocks to make a single function, but we must
-// run defers at the end of each block, not the combined function.
-var deferCount = 0
-
-func init() {
- deferCount = 1
- defer func() {
- deferCount++
- }()
- // defer runs HERE
-}
-
-func init() {
- // Strictly speaking the spec says deferCount may be 0 or 2
- // since the relative order of init blocks is unspecified.
- if deferCount != 2 {
- panic(deferCount) // defer call has not run!
- }
-}
-
-func main() {
-}