mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: fix slicecopy return value for zero-width elements
Fixes #8620 Change-Id: Idb49e586919d21d07e94a39ed9ebb0562f403460 Reviewed-on: https://go-review.googlesource.com/2221 Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
865e5e98b6
commit
537ddc9456
2 changed files with 35 additions and 1 deletions
|
|
@ -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)
|
||||
|
|
|
|||
30
test/fixedbugs/issue8620.go
Normal file
30
test/fixedbugs/issue8620.go
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
// 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:])
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue