// Copyright 2015 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. // This file contains tests for the cgo checker. package testdata // void f(void *); import "C" import "unsafe" func CgoTests() { var c chan bool C.f(*(*unsafe.Pointer)(unsafe.Pointer(&c))) // ERROR "embedded pointer" C.f(unsafe.Pointer(&c)) // ERROR "embedded pointer" var m map[string]string C.f(*(*unsafe.Pointer)(unsafe.Pointer(&m))) // ERROR "embedded pointer" C.f(unsafe.Pointer(&m)) // ERROR "embedded pointer" var f func() C.f(*(*unsafe.Pointer)(unsafe.Pointer(&f))) // ERROR "embedded pointer" C.f(unsafe.Pointer(&f)) // ERROR "embedded pointer" var s []int C.f(*(*unsafe.Pointer)(unsafe.Pointer(&s))) // ERROR "embedded pointer" C.f(unsafe.Pointer(&s)) // ERROR "embedded pointer" var a [1][]int C.f(*(*unsafe.Pointer)(unsafe.Pointer(&a))) // ERROR "embedded pointer" C.f(unsafe.Pointer(&a)) // ERROR "embedded pointer" var st struct{ f []int } C.f(*(*unsafe.Pointer)(unsafe.Pointer(&st))) // ERROR "embedded pointer" C.f(unsafe.Pointer(&st)) // ERROR "embedded pointer" // The following cases are OK. var i int C.f(*(*unsafe.Pointer)(unsafe.Pointer(&i))) C.f(unsafe.Pointer(&i)) C.f(*(*unsafe.Pointer)(unsafe.Pointer(&s[0]))) C.f(unsafe.Pointer(&s[0])) var a2 [1]int C.f(*(*unsafe.Pointer)(unsafe.Pointer(&a2))) C.f(unsafe.Pointer(&a2)) var st2 struct{ i int } C.f(*(*unsafe.Pointer)(unsafe.Pointer(&st2))) C.f(unsafe.Pointer(&st2)) type cgoStruct struct{ p *cgoStruct } C.f(unsafe.Pointer(&cgoStruct{})) C.CBytes([]byte("hello")) }