]> Cypherpunks repositories - gostls13.git/commit
[release-branch.go1.10] cmd/cgo: fix cgo bad typedefs
authorKeith Randall <khr@google.com>
Tue, 10 Jul 2018 20:47:15 +0000 (13:47 -0700)
committerIan Lance Taylor <iant@golang.org>
Wed, 8 Aug 2018 00:26:51 +0000 (00:26 +0000)
commit424f4ea0bd02c47fe424193924f94670d3db9e4d
tree25ab2e13d2de904700e0ae067f0f5cc35b5bc21e
parent48016b89d9ec26eb447b6bc78cabe48384ff4885
[release-branch.go1.10] cmd/cgo: fix cgo bad typedefs

Two fixes:

1) Typedefs of the bad typedefs should also not be rewritten to the
   underlying type.  They shouldn't just be uintptr, though, they should
   retain the C naming structure.  For example, in C:

   typedef const __CFString * CFStringRef;
   typedef CFStringRef SecKeyAlgorithm;

   we want the Go:

   type _Ctype_CFStringRef uintptr
   type _Ctype_SecKeyAlgorithm = _Ctype_CFStringRef

2) We need more types than just function arguments/return values.
   At least we need types of global variables, so when we see a reference to:

   extern const SecKeyAlgorithm kSecKeyAlgorithmECDSASignatureDigestX962SHA1;

   we know that we need to investigate the type SecKeyAlgorithm.
   Might as well just find every typedef and check the badness of all of them.
   This requires looping until a fixed point of known types is reached.
   Usually it takes just 2 iterations, sometimes 3.

Update #25036

Change-Id: I32ca7e48eb4d4133c6242e91d1879636f5224ea9
Reviewed-on: https://go-review.googlesource.com/123177
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-on: https://go-review.googlesource.com/124215
misc/cgo/test/issue24161_darwin_test.go
misc/cgo/test/issue24161e0/main.go [new file with mode: 0644]
misc/cgo/test/issue24161e1/main.go [new file with mode: 0644]
misc/cgo/test/issue24161e2/main.go [new file with mode: 0644]
src/cmd/cgo/gcc.go
src/cmd/cgo/main.go