go/misc/cgo
Keith Randall 48016b89d9 [release-branch.go1.10] cmd/cgo: check function argument/return types for bad C pointer types
We need to determine whether arguments to and return values from C
functions are "bad" typedef'd pointer types which need to be uintptr
on the Go side.

The type of those arguments are not specified explicitly. As a result,
we never look through the C declarations for the GetTypeID functions
associated with that type, and never realize that they are bad.
However, in another function in the same package there might be an
explicit reference. Then we end up with the declaration being uintptr
in one file and *struct{...} in another file. Badness ensues.

Fix this by doing a 2-pass algorithm. In the first pass, we run as
normal, but record all the argument and result types we see. In the
second pass, we include those argument types also when reading the C
types.

Update #25036

Change-Id: I8d727e73a2fbc88cb9d9899f8719ae405f59f753
Reviewed-on: https://go-review.googlesource.com/122575
Run-TryBot: Keith Randall <khr@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
(cherry picked from commit 20803e0f52809fa6088285c1c87246642df2b62d)
Reviewed-on: https://go-review.googlesource.com/122818
2018-08-08 00:26:43 +00:00
..
errors cmd/go: accept only limited compiler and linker flags in #cgo directives 2018-02-07 15:35:57 +00:00
fortran *.bash: always use the same string equality operator 2017-03-14 21:46:31 +00:00
gmp all: make copyright headers consistent with one space after period 2016-05-02 13:43:18 +00:00
life test/run: use go tool compile + link instead of go run when possible 2017-10-31 13:21:05 +00:00
nocgo
stdio test/run: use go tool compile + link instead of go run when possible 2017-10-31 13:21:05 +00:00
test [release-branch.go1.10] cmd/cgo: check function argument/return types for bad C pointer types 2018-08-08 00:26:43 +00:00
testasan
testcarchive cmd/go: correct buildmode test (from "c-header" to "c-shared") 2018-01-11 19:24:35 +00:00
testcshared [release-branch.go1.10] misc/cgo/testcshared: use file descriptor 30 for TestUnexportedSymbols 2018-05-08 16:30:25 +00:00
testgodefs cmd/cgo: add -srcdir option 2016-10-30 19:14:08 +00:00
testplugin [release-branch.go1.10] runtime: identify special functions by flag instead of address 2018-03-29 06:09:45 +00:00
testsanitizers all: use Fatalf instead of Fatal if format is given 2018-01-10 01:35:45 +00:00
testshared [release-branch.go1.10] cmd/go: fix go list .Stale computation 2018-04-27 20:51:11 +00:00
testsigfwd misc/cgo/testsigfwd: add missing return statement 2016-08-30 21:44:14 +00:00
testso cmd/dist: convert testso test into Go 2015-06-12 04:33:50 +00:00
testsovar misc/cgo/testsovar: needs the `extern` keyword to export variables on non-windows platforms 2015-07-21 18:10:57 +00:00
testtls all: make copyright headers consistent with one space after period 2016-05-02 13:43:18 +00:00