github.com/cockroachdb/tools@v0.0.0-20230222021103-a6d27438930d/go/analysis/passes/cgocall/testdata/src/a/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 a 8 9 // void f(void *ptr) {} 10 import "C" 11 12 import "unsafe" 13 14 func CgoTests() { 15 var c chan bool 16 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&c))) // want "embedded pointer" 17 C.f(unsafe.Pointer(&c)) // want "embedded pointer" 18 19 var m map[string]string 20 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&m))) // want "embedded pointer" 21 C.f(unsafe.Pointer(&m)) // want "embedded pointer" 22 23 var f func() 24 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&f))) // want "embedded pointer" 25 C.f(unsafe.Pointer(&f)) // want "embedded pointer" 26 27 var s []int 28 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&s))) // want "embedded pointer" 29 C.f(unsafe.Pointer(&s)) // want "embedded pointer" 30 31 var a [1][]int 32 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&a))) // want "embedded pointer" 33 C.f(unsafe.Pointer(&a)) // want "embedded pointer" 34 35 var st struct{ f []int } 36 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&st))) // want "embedded pointer" 37 C.f(unsafe.Pointer(&st)) // want "embedded pointer" 38 39 var st3 S 40 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&st3))) // want "embedded pointer" 41 C.f(unsafe.Pointer(&st3)) // want "embedded pointer" 42 43 // The following cases are OK. 44 var i int 45 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&i))) 46 C.f(unsafe.Pointer(&i)) 47 48 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&s[0]))) 49 C.f(unsafe.Pointer(&s[0])) 50 51 var a2 [1]int 52 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&a2))) 53 C.f(unsafe.Pointer(&a2)) 54 55 var st2 struct{ i int } 56 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&st2))) 57 C.f(unsafe.Pointer(&st2)) 58 59 var st4 S2 60 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&st4))) 61 C.f(unsafe.Pointer(&st4)) 62 63 type cgoStruct struct{ p *cgoStruct } 64 C.f(unsafe.Pointer(&cgoStruct{})) 65 66 C.CBytes([]byte("hello")) 67 } 68 69 type S struct{ slice []int } 70 71 type S2 struct{ int int }