diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2016-02-25 19:16:18 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2016-02-25 18:57:28 +0000 |
| commit | db44223fde80485132f477a51b690d5d54dad56e (patch) | |
| tree | f9a28cc051dc896f8f96f7df96188b6e1ea32f7e /src/runtime | |
| parent | 30f93f09944c54147bec9e5c39631f17addd94c7 (diff) | |
| download | go-db44223fde80485132f477a51b690d5d54dad56e.tar.xz | |
runtime: fix getcallerpc args
Change-Id: I6b14b8eecf125dd74bd40f4e7fff6b49de150e42
Reviewed-on: https://go-review.googlesource.com/19897
Run-TryBot: Dmitry Vyukov <dvyukov@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/runtime')
| -rw-r--r-- | src/runtime/race/output_test.go | 17 | ||||
| -rw-r--r-- | src/runtime/string.go | 4 |
2 files changed, 19 insertions, 2 deletions
diff --git a/src/runtime/race/output_test.go b/src/runtime/race/output_test.go index 0c71a019dd..27d9efb687 100644 --- a/src/runtime/race/output_test.go +++ b/src/runtime/race/output_test.go @@ -180,4 +180,21 @@ func TestFail(t *testing.T) { PASS Found 1 data race\(s\) FAIL`}, + + {"slicebytetostring_pc", "run", "atexit_sleep_ms=0", ` +package main +func main() { + done := make(chan string) + data := make([]byte, 10) + go func() { + done <- string(data) + }() + data[0] = 1 + <-done +} +`, ` + runtime\.slicebytetostring\(\) + .*/runtime/string\.go:.* + main\.main\.func1\(\) + .*/main.go:7`}, } diff --git a/src/runtime/string.go b/src/runtime/string.go index dd04bda04b..5dc7e0295a 100644 --- a/src/runtime/string.go +++ b/src/runtime/string.go @@ -84,7 +84,7 @@ func slicebytetostring(buf *tmpBuf, b []byte) string { if raceenabled && l > 0 { racereadrangepc(unsafe.Pointer(&b[0]), uintptr(l), - getcallerpc(unsafe.Pointer(&b)), + getcallerpc(unsafe.Pointer(&buf)), funcPC(slicebytetostring)) } if msanenabled && l > 0 { @@ -189,7 +189,7 @@ func slicerunetostring(buf *tmpBuf, a []rune) string { if raceenabled && len(a) > 0 { racereadrangepc(unsafe.Pointer(&a[0]), uintptr(len(a))*unsafe.Sizeof(a[0]), - getcallerpc(unsafe.Pointer(&a)), + getcallerpc(unsafe.Pointer(&buf)), funcPC(slicerunetostring)) } if msanenabled && len(a) > 0 { |
