mirror of
https://github.com/golang/go.git
synced 2025-05-05 23:53:05 +00:00
test: add test to verify that string copies don't get optimized away
Fixes #25834 Change-Id: I33e58dabfd04b84dfee1a9a3796796b5d19862e7 Reviewed-on: https://go-review.googlesource.com/118295 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
48987baa09
commit
39ad208c13
29
test/strcopy.go
Normal file
29
test/strcopy.go
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
// run
|
||||||
|
|
||||||
|
// Copyright 2018 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.
|
||||||
|
|
||||||
|
// Test that string([]byte(string)) makes a copy and doesn't reduce to
|
||||||
|
// nothing. (Issue 25834)
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
var (
|
||||||
|
buf = make([]byte, 2<<10)
|
||||||
|
large = string(buf)
|
||||||
|
sub = large[10:12]
|
||||||
|
subcopy = string([]byte(sub))
|
||||||
|
subh = *(*reflect.StringHeader)(unsafe.Pointer(&sub))
|
||||||
|
subcopyh = *(*reflect.StringHeader)(unsafe.Pointer(&subcopy))
|
||||||
|
)
|
||||||
|
if subh.Data == subcopyh.Data {
|
||||||
|
panic("sub and subcopy have the same underlying array")
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user