github.com/kidsbmilk/gofronted_all@v0.0.0-20220701224323-6479d5976c5d/libgo/misc/cgo/test/issue21897.go (about) 1 // Copyright 2017 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build darwin && cgo && !internal 6 // +build darwin,cgo,!internal 7 8 package cgotest 9 10 /* 11 #cgo LDFLAGS: -framework CoreFoundation 12 #include <CoreFoundation/CoreFoundation.h> 13 */ 14 import "C" 15 import ( 16 "runtime/debug" 17 "testing" 18 "unsafe" 19 ) 20 21 func test21897(t *testing.T) { 22 // Please write barrier, kick in soon. 23 defer debug.SetGCPercent(debug.SetGCPercent(1)) 24 25 for i := 0; i < 10000; i++ { 26 testCFNumberRef() 27 testCFDateRef() 28 testCFBooleanRef() 29 // Allocate some memory, so eventually the write barrier is enabled 30 // and it will see writes of bad pointers in the test* functions below. 31 byteSliceSink = make([]byte, 1024) 32 } 33 } 34 35 var byteSliceSink []byte 36 37 func testCFNumberRef() { 38 var v int64 = 0 39 xCFNumberRef = C.CFNumberCreate(C.kCFAllocatorSystemDefault, C.kCFNumberSInt64Type, unsafe.Pointer(&v)) 40 //fmt.Printf("CFNumberRef: %x\n", uintptr(unsafe.Pointer(xCFNumberRef))) 41 } 42 43 var xCFNumberRef C.CFNumberRef 44 45 func testCFDateRef() { 46 xCFDateRef = C.CFDateCreate(C.kCFAllocatorSystemDefault, 0) // 0 value is 1 Jan 2001 00:00:00 GMT 47 //fmt.Printf("CFDateRef: %x\n", uintptr(unsafe.Pointer(xCFDateRef))) 48 } 49 50 var xCFDateRef C.CFDateRef 51 52 func testCFBooleanRef() { 53 xCFBooleanRef = C.kCFBooleanFalse 54 //fmt.Printf("CFBooleanRef: %x\n", uintptr(unsafe.Pointer(xCFBooleanRef))) 55 } 56 57 var xCFBooleanRef C.CFBooleanRef