GoPLS Viewer

Home|gopls/go/analysis/passes/cgocall/testdata/src/a/cgo.go
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
7package a
8
9// void f(void *ptr) {}
10import "C"
11
12import "unsafe"
13
14func 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
69type S struct{ slice []int }
70
71type S2 struct{ int int }
72
MembersX
C
CgoTests.s
CgoTests.i
CgoTests.cgoStruct.p
S
S.slice
S2.int
CgoTests
CgoTests.a
S2
unsafe
CgoTests.m
CgoTests.st3
CgoTests.a2
CgoTests.st4
CgoTests.cgoStruct
Members
X