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 // +build darwin,cgo,!internal 6 7 package cgotest 8 9 /* 10 #cgo LDFLAGS: -framework CoreFoundation 11 #include <CoreFoundation/CoreFoundation.h> 12 */ 13 import "C" 14 import ( 15 "runtime/debug" 16 "testing" 17 "unsafe" 18 ) 19 20 func test21897(t *testing.T) { 21 // Please write barrier, kick in soon. 22 defer debug.SetGCPercent(debug.SetGCPercent(1)) 23 24 for i := 0; i < 10000; i++ { 25 testCFNumberRef() 26 testCFDateRef() 27 testCFBooleanRef() 28 // Allocate some memory, so eventually the write barrier is enabled 29 // and it will see writes of bad pointers in the test* functions below. 30 byteSliceSink = make([]byte, 1024) 31 } 32 } 33 34 var byteSliceSink []byte 35 36 func testCFNumberRef() { 37 var v int64 = 0 38 xCFNumberRef = C.CFNumberCreate(C.kCFAllocatorSystemDefault, C.kCFNumberSInt64Type, unsafe.Pointer(&v)) 39 //fmt.Printf("CFNumberRef: %x\n", uintptr(unsafe.Pointer(xCFNumberRef))) 40 } 41 42 var xCFNumberRef C.CFNumberRef 43 44 func testCFDateRef() { 45 xCFDateRef = C.CFDateCreate(C.kCFAllocatorSystemDefault, 0) // 0 value is 1 Jan 2001 00:00:00 GMT 46 //fmt.Printf("CFDateRef: %x\n", uintptr(unsafe.Pointer(xCFDateRef))) 47 } 48 49 var xCFDateRef C.CFDateRef 50 51 func testCFBooleanRef() { 52 xCFBooleanRef = C.kCFBooleanFalse 53 //fmt.Printf("CFBooleanRef: %x\n", uintptr(unsafe.Pointer(xCFBooleanRef))) 54 } 55 56 var xCFBooleanRef C.CFBooleanRef 57