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 } |
72 |
Members