Commit 537ddc94 authored by Matthew Dempsky's avatar Matthew Dempsky Committed by Ian Lance Taylor

runtime: fix slicecopy return value for zero-width elements

Fixes #8620

Change-Id: Idb49e586919d21d07e94a39ed9ebb0562f403460
Reviewed-on: https://go-review.googlesource.com/2221Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
parent 865e5e98
......@@ -92,7 +92,7 @@ func growslice(t *slicetype, old sliceStruct, n int64) sliceStruct {
}
func slicecopy(to sliceStruct, fm sliceStruct, width uintptr) int {
if fm.len == 0 || to.len == 0 || width == 0 {
if fm.len == 0 || to.len == 0 {
return 0
}
......@@ -101,6 +101,10 @@ func slicecopy(to sliceStruct, fm sliceStruct, width uintptr) int {
n = to.len
}
if width == 0 {
return n
}
if raceenabled {
callerpc := getcallerpc(unsafe.Pointer(&to))
pc := funcPC(slicecopy)
......
// run
// Copyright 2014 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.
// Issue 8620. Used to fail with -race.
package main
func min(a, b int) int {
if a < b {
return a
}
return b
}
func test(s1, s2 []struct{}) {
n := min(len(s1), len(s2))
if copy(s1, s2) != n {
panic("bad copy result")
}
}
func main() {
var b [100]struct{}
test(b[:], b[:])
test(b[1:], b[:])
test(b[:], b[2:])
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment