mirror of
https://github.com/golang/go
synced 2024-10-14 11:53:56 +00:00
cmd/cgo: prevent redeclaration of _Ctype_void when C.void is used
CL 230037 changed cmd/cgo to emit "type _Ctype_foo = bar" aliases for all C.foo types mentioned in the original Go source files. However, cmd/cgo already emits an appropriate type definition for _Ctype_void. So if a source file explicitly mentions C.void, this resulted in _Ctype_void being declared multiple times. This CL fixes the issue by suppressing the "type _Ctype_void = _Ctype_void" alias before printing it. This should be safe because _Ctype_void is the only type that's specially emitted in out.go at the moment. A somewhat better fix might be to fix how _Ctype_void is declared in the cmd/cgo "frontend", but this is a less invasive fix. Fixes #39877. Change-Id: Ief264b3847c8ef8df1478a6333647ff2cf09b63d Reviewed-on: https://go-review.googlesource.com/c/go/+/240180 Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
3c474d4164
commit
a295d59d10
|
@ -2200,3 +2200,7 @@ func test32579(t *testing.T) {
|
|||
// issue 38649
|
||||
|
||||
var issue38649 C.netbsd_gid = 42
|
||||
|
||||
// issue 39877
|
||||
|
||||
var issue39877 *C.void = nil
|
||||
|
|
|
@ -98,6 +98,11 @@ func (p *Package) writeDefs() {
|
|||
|
||||
typedefNames := make([]string, 0, len(typedef))
|
||||
for name := range typedef {
|
||||
if name == "_Ctype_void" {
|
||||
// We provide an appropriate declaration for
|
||||
// _Ctype_void below (#39877).
|
||||
continue
|
||||
}
|
||||
typedefNames = append(typedefNames, name)
|
||||
}
|
||||
sort.Strings(typedefNames)
|
||||
|
|
Loading…
Reference in a new issue