• Keith Randall's avatar
    cmd/cgo: fix cgo bad typedefs · b888a622
    Keith Randall authored
    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.
    
    Fixes #24161
    
    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: 's avatarIan Lance Taylor <iant@golang.org>
    b888a622
gcc.go 77.2 KB