diff options
| author | Alan Donovan <adonovan@google.com> | 2016-10-24 11:00:19 -0400 |
|---|---|---|
| committer | Alan Donovan <adonovan@google.com> | 2016-10-24 19:05:50 +0000 |
| commit | 07a22dbd34d439182bea6a966b80baa2df7c72f4 (patch) | |
| tree | 6989d1ebda7728c38fcdb9bf3356aabb4998084e /src | |
| parent | 2a3db5c0175e26ba99adca90e5bab6cb4e85cc2d (diff) | |
| download | go-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.go | 5 | ||||
| -rw-r--r-- | src/cmd/vet/testdata/cgo.go | 2 |
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")) } |
