You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
674 B
30 lines
674 B
7 months ago
|
// 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")
|
||
|
}
|
||
|
}
|