diff options
author | Daniel Morsing <daniel.morsing@gmail.com> | 2014-03-27 20:23:16 +0000 |
---|---|---|
committer | Daniel Morsing <daniel.morsing@gmail.com> | 2014-03-27 20:23:16 +0000 |
commit | 0e3ecd00009ef86aca9df91c2947ab0ed7b570f0 (patch) | |
tree | 247d805109929471df833f050f2983c03c6768bc /misc/cgo | |
parent | 688c7d359f266abb881a9432b9bec9954f7960af (diff) | |
download | go-0e3ecd00009ef86aca9df91c2947ab0ed7b570f0.tar.gz |
cmd/cgo: enforce typing of 0-sized types
cgo represents all 0-sized and unsized types internally as [0]byte. This means that pointers to incomplete types would be interchangable, even if given a name by typedef.
Fixes issue 7409.
LGTM=iant
R=golang-codereviews, bradfitz, iant
CC=golang-codereviews
https://codereview.appspot.com/76450043
Diffstat (limited to 'misc/cgo')
-rw-r--r-- | misc/cgo/errors/err3.go | 18 | ||||
-rwxr-xr-x | misc/cgo/errors/test.bash | 1 |
2 files changed, 19 insertions, 0 deletions
diff --git a/misc/cgo/errors/err3.go b/misc/cgo/errors/err3.go new file mode 100644 index 000000000..3680a4a4c --- /dev/null +++ b/misc/cgo/errors/err3.go @@ -0,0 +1,18 @@ +// Copyright 2014 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. + +package main + +/* +typedef struct foo foo_t; +typedef struct bar bar_t; + +foo_t *foop; +*/ +import "C" + +func main() { + x := (*C.bar_t)(nil) + C.foop = x // ERROR HERE +} diff --git a/misc/cgo/errors/test.bash b/misc/cgo/errors/test.bash index 697ae2fed..f0f60c844 100755 --- a/misc/cgo/errors/test.bash +++ b/misc/cgo/errors/test.bash @@ -26,6 +26,7 @@ check() { check err1.go check err2.go +check err3.go rm -rf errs _obj exit 0 |