// 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 | |
} | |
} |