...
Run Format

Source file test/fixedbugs/issue19168.go

Documentation: test/fixedbugs

  // errorcheck -0 -l -d=wb
  
  // 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 p
  
  import (
  	"reflect"
  	"unsafe"
  
  	reflect2 "reflect"
  )
  
  func sink(e interface{})
  
  func a(hdr *reflect.SliceHeader, p *byte) {
  	hdr.Data = uintptr(unsafe.Pointer(p)) // ERROR "write barrier"
  }
  
  func b(hdr *reflect.StringHeader, p *byte) {
  	hdr.Data = uintptr(unsafe.Pointer(p)) // ERROR "write barrier"
  }
  
  func c(hdrs *[1]reflect.SliceHeader, p *byte) {
  	hdrs[0].Data = uintptr(unsafe.Pointer(p)) // ERROR "write barrier"
  }
  
  func d(hdr *struct{ s reflect.StringHeader }, p *byte) {
  	hdr.s.Data = uintptr(unsafe.Pointer(p)) // ERROR "write barrier"
  }
  
  func e(p *byte) (resHeap, resStack string) {
  	sink(&resHeap)
  
  	hdr := (*reflect.StringHeader)(unsafe.Pointer(&resHeap))
  	hdr.Data = uintptr(unsafe.Pointer(p)) // ERROR "write barrier"
  
  	// No write barrier for non-escaping stack vars.
  	hdr = (*reflect.StringHeader)(unsafe.Pointer(&resStack))
  	hdr.Data = uintptr(unsafe.Pointer(p))
  
  	return
  }
  
  func f(hdr *reflect2.SliceHeader, p *byte) {
  	hdr.Data = uintptr(unsafe.Pointer(p)) // ERROR "write barrier"
  }
  
  type SliceHeader struct {
  	Data uintptr
  }
  
  func g(hdr *SliceHeader, p *byte) {
  	// No write barrier for lookalike SliceHeader.
  	hdr.Data = uintptr(unsafe.Pointer(p))
  }
  

View as plain text