github.com/miolini/go@v0.0.0-20160405192216-fca68c8cb408/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  }