aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cmd/vet/cgo.go5
-rw-r--r--src/cmd/vet/testdata/cgo.go2
2 files changed, 7 insertions, 0 deletions
diff --git a/src/cmd/vet/cgo.go b/src/cmd/vet/cgo.go
index b896862c8f..d233e9a960 100644
--- a/src/cmd/vet/cgo.go
+++ b/src/cmd/vet/cgo.go
@@ -38,6 +38,11 @@ func checkCgoCall(f *File, node ast.Node) {
return
}
+ // A call to C.CBytes passes a pointer but is always safe.
+ if sel.Sel.Name == "CBytes" {
+ return
+ }
+
for _, arg := range x.Args {
if !typeOKForCgoCall(cgoBaseType(f, arg)) {
f.Badf(arg.Pos(), "possibly passing Go type with embedded pointer to C")
diff --git a/src/cmd/vet/testdata/cgo.go b/src/cmd/vet/testdata/cgo.go
index 5ce6007fcb..25d395b1ea 100644
--- a/src/cmd/vet/testdata/cgo.go
+++ b/src/cmd/vet/testdata/cgo.go
@@ -51,4 +51,6 @@ func CgoTests() {
var st2 struct{ i int }
C.f(*(*unsafe.Pointer)(unsafe.Pointer(&st2)))
C.f(unsafe.Pointer(&st2))
+
+ C.CBytes([]byte("hello"))
}