From 07a22dbd34d439182bea6a966b80baa2df7c72f4 Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Mon, 24 Oct 2016 11:00:19 -0400 Subject: [PATCH] cmd/vet: cgo: emit no error for calls to C.CBytes Fixes issue golang/go#17563 Change-Id: Ibb41ea9419907193526cc601f6afd07d8689b1fe Reviewed-on: https://go-review.googlesource.com/31810 Reviewed-by: Ian Lance Taylor Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot --- src/cmd/vet/cgo.go | 5 +++++ src/cmd/vet/testdata/cgo.go | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/cmd/vet/cgo.go b/src/cmd/vet/cgo.go index b896862c8f6..d233e9a9602 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 5ce6007fcb4..25d395b1ea8 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")) }