aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/race/testdata
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2016-07-06 15:30:33 -0700
committerIan Lance Taylor <iant@golang.org>2016-08-23 13:12:15 +0000
commitdc9755c2a2b561af6c990399938980ab044406ba (patch)
treebf510060a8dfdfb371dea6b282136bca628e6784 /src/runtime/race/testdata
parentd9504d4623556467f023da5c33236ec0cf4520cb (diff)
downloadgo-dc9755c2a2b561af6c990399938980ab044406ba.tar.xz
runtime: add missing race and msan checks to reflect functions
Add missing race and msan checks to reflect.typedmmemove and reflect.typedslicecopy. Missing these checks caused the race detector to miss races and caused msan to issue false positive errors. Fixes #16281. Change-Id: I500b5f92bd68dc99dd5d6f297827fd5d2609e88b Reviewed-on: https://go-review.googlesource.com/24760 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
Diffstat (limited to 'src/runtime/race/testdata')
-rw-r--r--src/runtime/race/testdata/reflect_test.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/runtime/race/testdata/reflect_test.go b/src/runtime/race/testdata/reflect_test.go
new file mode 100644
index 0000000000..b567400156
--- /dev/null
+++ b/src/runtime/race/testdata/reflect_test.go
@@ -0,0 +1,46 @@
+// Copyright 2016 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 race_test
+
+import (
+ "reflect"
+ "testing"
+)
+
+func TestRaceReflectRW(t *testing.T) {
+ ch := make(chan bool, 1)
+ i := 0
+ v := reflect.ValueOf(&i)
+ go func() {
+ v.Elem().Set(reflect.ValueOf(1))
+ ch <- true
+ }()
+ _ = v.Elem().Int()
+ <-ch
+}
+
+func TestRaceReflectWW(t *testing.T) {
+ ch := make(chan bool, 1)
+ i := 0
+ v := reflect.ValueOf(&i)
+ go func() {
+ v.Elem().Set(reflect.ValueOf(1))
+ ch <- true
+ }()
+ v.Elem().Set(reflect.ValueOf(2))
+ <-ch
+}
+
+func TestRaceReflectCopyWW(t *testing.T) {
+ ch := make(chan bool, 1)
+ a := make([]byte, 2)
+ v := reflect.ValueOf(a)
+ go func() {
+ reflect.Copy(v, v)
+ ch <- true
+ }()
+ reflect.Copy(v, v)
+ <-ch
+}