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.
5 // This file contains tests for the cgo checker.
9 // void f(void *ptr) {}
16 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&c))) // want "embedded pointer"
17 C.f(unsafe.Pointer(&c)) // want "embedded pointer"
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"
24 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&f))) // want "embedded pointer"
25 C.f(unsafe.Pointer(&f)) // want "embedded pointer"
28 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&s))) // want "embedded pointer"
29 C.f(unsafe.Pointer(&s)) // want "embedded pointer"
32 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&a))) // want "embedded pointer"
33 C.f(unsafe.Pointer(&a)) // want "embedded pointer"
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"
40 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&st3))) // want "embedded pointer"
41 C.f(unsafe.Pointer(&st3)) // want "embedded pointer"
43 // The following cases are OK.
45 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&i)))
46 C.f(unsafe.Pointer(&i))
48 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&s[0])))
49 C.f(unsafe.Pointer(&s[0]))
52 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&a2)))
53 C.f(unsafe.Pointer(&a2))
55 var st2 struct{ i int }
56 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&st2)))
57 C.f(unsafe.Pointer(&st2))
60 C.f(*(*unsafe.Pointer)(unsafe.Pointer(&st4)))
61 C.f(unsafe.Pointer(&st4))
63 type cgoStruct struct{ p *cgoStruct }
64 C.f(unsafe.Pointer(&cgoStruct{}))
66 C.CBytes([]byte("hello"))
69 type S struct{ slice []int }
71 type S2 struct{ int int }