// 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. //go:build darwin && cgo && !internal // +build darwin,cgo,!internal package cgotest /* #cgo LDFLAGS: -framework CoreFoundation #include */ import "C" import ( "runtime/debug" "testing" "unsafe" ) func test21897(t *testing.T) { // Please write barrier, kick in soon. defer debug.SetGCPercent(debug.SetGCPercent(1)) for i := 0; i < 10000; i++ { testCFNumberRef() testCFDateRef() testCFBooleanRef() // Allocate some memory, so eventually the write barrier is enabled // and it will see writes of bad pointers in the test* functions below. byteSliceSink = make([]byte, 1024) } } var byteSliceSink []byte func testCFNumberRef() { var v int64 = 0 xCFNumberRef = C.CFNumberCreate(C.kCFAllocatorSystemDefault, C.kCFNumberSInt64Type, unsafe.Pointer(&v)) //fmt.Printf("CFNumberRef: %x\n", uintptr(unsafe.Pointer(xCFNumberRef))) } var xCFNumberRef C.CFNumberRef func testCFDateRef() { xCFDateRef = C.CFDateCreate(C.kCFAllocatorSystemDefault, 0) // 0 value is 1 Jan 2001 00:00:00 GMT //fmt.Printf("CFDateRef: %x\n", uintptr(unsafe.Pointer(xCFDateRef))) } var xCFDateRef C.CFDateRef func testCFBooleanRef() { xCFBooleanRef = C.kCFBooleanFalse //fmt.Printf("CFBooleanRef: %x\n", uintptr(unsafe.Pointer(xCFBooleanRef))) } var xCFBooleanRef C.CFBooleanRef