1// run 2 3// Copyright 2016 The Go Authors. All rights reserved. 4// Use of this source code is governed by a BSD-style 5// license that can be found in the LICENSE file. 6 7// Perform tracebackdefers with a deferred reflection method. 8 9package main 10 11import "reflect" 12 13type T struct{} 14 15func (T) M() { 16} 17 18func F(args []reflect.Value) (results []reflect.Value) { 19 return nil 20} 21 22func main() { 23 done := make(chan bool) 24 go func() { 25 // Test reflect.makeFuncStub. 26 t := reflect.TypeOf((func())(nil)) 27 f := reflect.MakeFunc(t, F).Interface().(func()) 28 defer f() 29 growstack(10000) 30 done <- true 31 }() 32 <-done 33 go func() { 34 // Test reflect.methodValueCall. 35 f := reflect.ValueOf(T{}).Method(0).Interface().(func()) 36 defer f() 37 growstack(10000) 38 done <- true 39 }() 40 <-done 41} 42 43func growstack(x int) { 44 if x == 0 { 45 return 46 } 47 growstack(x - 1) 48} 49