Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201028153306-37f0764111ff / 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
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 }