|  | // run | 
|  |  | 
|  | // Copyright 2019 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. | 
|  |  | 
|  | // Make sure the runtime can scan args of an unstarted goroutine | 
|  | // which starts with a reflect-generated function. | 
|  |  | 
|  | package main | 
|  |  | 
|  | import ( | 
|  | "reflect" | 
|  | "runtime" | 
|  | ) | 
|  |  | 
|  | const N = 100 | 
|  |  | 
|  | type T struct { | 
|  | } | 
|  |  | 
|  | func (t *T) Foo(c chan bool) { | 
|  | c <- true | 
|  | } | 
|  |  | 
|  | func main() { | 
|  | t := &T{} | 
|  | runtime.GOMAXPROCS(1) | 
|  | c := make(chan bool, N) | 
|  | for i := 0; i < N; i++ { | 
|  | f := reflect.ValueOf(t).MethodByName("Foo").Interface().(func(chan bool)) | 
|  | go f(c) | 
|  | } | 
|  | runtime.GC() | 
|  | for i := 0; i < N; i++ { | 
|  | <-c | 
|  | } | 
|  | } |