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 7package cgotest 8 9/* 10#cgo LDFLAGS: -framework CoreFoundation 11#include <CoreFoundation/CoreFoundation.h> 12*/ 13import "C" 14import ( 15 "runtime/debug" 16 "testing" 17 "unsafe" 18) 19 20func 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 34var byteSliceSink []byte 35 36func 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 42var xCFNumberRef C.CFNumberRef 43 44func 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 49var xCFDateRef C.CFDateRef 50 51func testCFBooleanRef() { 52 xCFBooleanRef = C.kCFBooleanFalse 53 //fmt.Printf("CFBooleanRef: %x\n", uintptr(unsafe.Pointer(xCFBooleanRef))) 54} 55 56var xCFBooleanRef C.CFBooleanRef 57