| // 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")) |
| } |