aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlan Donovan <adonovan@google.com>2016-10-24 11:00:19 -0400
committerAlan Donovan <adonovan@google.com>2016-10-24 19:05:50 +0000
commit07a22dbd34d439182bea6a966b80baa2df7c72f4 (patch)
tree6989d1ebda7728c38fcdb9bf3356aabb4998084e /src
parent2a3db5c0175e26ba99adca90e5bab6cb4e85cc2d (diff)
downloadgo-07a22dbd34d439182bea6a966b80baa2df7c72f4.tar.xz
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 <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
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"))
}