...
Run Format

Source file test/fixedbugs/issue19743.go

Documentation: test/fixedbugs

  // errorcheck -0 -m -l
  
  // Copyright 2017 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.
  
  package foo
  
  // Escape analysis needs to treat the uintptr-typed reflect.*Header fields as pointers.
  
  import (
  	"reflect"
  	"unsafe"
  )
  
  type immutableBytes []byte
  
  // Bug was failure to leak param b.
  func toString(b immutableBytes) string { // ERROR "leaking param: b$"
  	var s string
  	if len(b) == 0 {
  		return s
  	}
  
  	strHeader := (*reflect.StringHeader)(unsafe.Pointer(&s))         // ERROR "toString &s does not escape$"
  	strHeader.Data = (*reflect.SliceHeader)(unsafe.Pointer(&b)).Data // ERROR "toString &b does not escape$"
  
  	l := len(b)
  	strHeader.Len = l
  	return s
  }
  

View as plain text