.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.1.1-0.20210319172145-bda8f5cee399 / go / analysis / passes / cgocall / testdata / src / a / cgo.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.1-0.20210319172145-bda8f5cee399/go/analysis/passes/cgocall/testdata/src/a/cgo.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.1.1-0.20210319172145-bda8f5cee399/go/analysis/passes/cgocall/testdata/src/a/cgo.go
new file mode 100644 (file)
index 0000000..75464b2
--- /dev/null
@@ -0,0 +1,71 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// This file contains tests for the cgo checker.
+
+package a
+
+// void f(void *ptr) {}
+import "C"
+
+import "unsafe"
+
+func CgoTests() {
+       var c chan bool
+       C.f(*(*unsafe.Pointer)(unsafe.Pointer(&c))) // want "embedded pointer"
+       C.f(unsafe.Pointer(&c))                     // want "embedded pointer"
+
+       var m map[string]string
+       C.f(*(*unsafe.Pointer)(unsafe.Pointer(&m))) // want "embedded pointer"
+       C.f(unsafe.Pointer(&m))                     // want "embedded pointer"
+
+       var f func()
+       C.f(*(*unsafe.Pointer)(unsafe.Pointer(&f))) // want "embedded pointer"
+       C.f(unsafe.Pointer(&f))                     // want "embedded pointer"
+
+       var s []int
+       C.f(*(*unsafe.Pointer)(unsafe.Pointer(&s))) // want "embedded pointer"
+       C.f(unsafe.Pointer(&s))                     // want "embedded pointer"
+
+       var a [1][]int
+       C.f(*(*unsafe.Pointer)(unsafe.Pointer(&a))) // want "embedded pointer"
+       C.f(unsafe.Pointer(&a))                     // want "embedded pointer"
+
+       var st struct{ f []int }
+       C.f(*(*unsafe.Pointer)(unsafe.Pointer(&st))) // want "embedded pointer"
+       C.f(unsafe.Pointer(&st))                     // want "embedded pointer"
+
+       var st3 S
+       C.f(*(*unsafe.Pointer)(unsafe.Pointer(&st3))) // want "embedded pointer"
+       C.f(unsafe.Pointer(&st3))                     // want "embedded pointer"
+
+       // The following cases are OK.
+       var i int
+       C.f(*(*unsafe.Pointer)(unsafe.Pointer(&i)))
+       C.f(unsafe.Pointer(&i))
+
+       C.f(*(*unsafe.Pointer)(unsafe.Pointer(&s[0])))
+       C.f(unsafe.Pointer(&s[0]))
+
+       var a2 [1]int
+       C.f(*(*unsafe.Pointer)(unsafe.Pointer(&a2)))
+       C.f(unsafe.Pointer(&a2))
+
+       var st2 struct{ i int }
+       C.f(*(*unsafe.Pointer)(unsafe.Pointer(&st2)))
+       C.f(unsafe.Pointer(&st2))
+
+       var st4 S2
+       C.f(*(*unsafe.Pointer)(unsafe.Pointer(&st4)))
+       C.f(unsafe.Pointer(&st4))
+
+       type cgoStruct struct{ p *cgoStruct }
+       C.f(unsafe.Pointer(&cgoStruct{}))
+
+       C.CBytes([]byte("hello"))
+}
+
+type S struct{ slice []int }
+
+type S2 struct{ int int }