github.com/sean-/go@v0.0.0-20151219100004-97f854cd7bb6/src/cmd/vet/testdata/cgo.go (about) 1 // Copyright 2015 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 // This file contains tests for the cgo checker. 6 7 package testdata 8 9 // void f(void *); 10 import "C" 11 12 import "unsafe" 13 14 func CgoTests() { 15 var c chan bool 16 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&c))) // ERROR "embedded pointer" 17 C.f(unsafe.Pointer(&c)) // ERROR "embedded pointer" 18 19 var m map[string]string 20 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&m))) // ERROR "embedded pointer" 21 C.f(unsafe.Pointer(&m)) // ERROR "embedded pointer" 22 23 var f func() 24 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&f))) // ERROR "embedded pointer" 25 C.f(unsafe.Pointer(&f)) // ERROR "embedded pointer" 26 27 var s []int 28 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&s))) // ERROR "embedded pointer" 29 C.f(unsafe.Pointer(&s)) // ERROR "embedded pointer" 30 31 var a [1][]int 32 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&a))) // ERROR "embedded pointer" 33 C.f(unsafe.Pointer(&a)) // ERROR "embedded pointer" 34 35 var st struct{ f []int } 36 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&st))) // ERROR "embedded pointer" 37 C.f(unsafe.Pointer(&st)) // ERROR "embedded pointer" 38 39 // The following cases are OK. 40 var i int 41 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&i))) 42 C.f(unsafe.Pointer(&i)) 43 44 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&s[0]))) 45 C.f(unsafe.Pointer(&s[0])) 46 47 var a2 [1]int 48 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&a2))) 49 C.f(unsafe.Pointer(&a2)) 50 51 var st2 struct{ i int } 52 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&st2))) 53 C.f(unsafe.Pointer(&st2)) 54 }