mirror of
https://github.com/golang/go
synced 2024-09-04 23:44:16 +00:00
![Keith Randall](/assets/img/avatar_default.png)
reflect.assignTo writes to the target using write barriers. Make sure that the memory it is writing to is zeroed, so the write barrier does not read pointers from uninitialized memory. Fixes #39541 Change-Id: Ia64b2cacc193bffd0c1396bbce1dfb8182d4905b Reviewed-on: https://go-review.googlesource.com/c/go/+/238760 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
34 lines
631 B
Go
34 lines
631 B
Go
// run
|
|
|
|
// Copyright 2020 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.
|
|
|
|
package main
|
|
|
|
import "reflect"
|
|
|
|
func sub(args []reflect.Value) []reflect.Value {
|
|
type A struct {
|
|
s int
|
|
t int
|
|
}
|
|
return []reflect.Value{reflect.ValueOf(A{1, 2})}
|
|
}
|
|
|
|
func main() {
|
|
f := reflect.MakeFunc(reflect.TypeOf((func() interface{})(nil)), sub).Interface().(func() interface{})
|
|
c := make(chan bool, 100)
|
|
for i := 0; i < 100; i++ {
|
|
go func() {
|
|
for j := 0; j < 10000; j++ {
|
|
f()
|
|
}
|
|
c <- true
|
|
}()
|
|
}
|
|
for i := 0; i < 100; i++ {
|
|
<-c
|
|
}
|
|
}
|