1// run 2 3// Copyright 2018 The Go Authors. All rights reserved. 4// Use of this source code is governed by a BSD-style 5// license that can be found in the LICENSE file. 6 7// Test that string([]byte(string)) makes a copy and doesn't reduce to 8// nothing. (Issue 25834) 9 10package main 11 12import ( 13 "reflect" 14 "unsafe" 15) 16 17func main() { 18 var ( 19 buf = make([]byte, 2<<10) 20 large = string(buf) 21 sub = large[10:12] 22 subcopy = string([]byte(sub)) 23 subh = *(*reflect.StringHeader)(unsafe.Pointer(&sub)) 24 subcopyh = *(*reflect.StringHeader)(unsafe.Pointer(&subcopy)) 25 ) 26 if subh.Data == subcopyh.Data { 27 panic("sub and subcopy have the same underlying array") 28 } 29} 30