]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/cgo: prevent redeclaration of _Ctype_void when C.void is used
authorMatthew Dempsky <mdempsky@google.com>
Fri, 26 Jun 2020 18:26:33 +0000 (11:26 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Fri, 26 Jun 2020 19:00:25 +0000 (19:00 +0000)
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>

misc/cgo/test/test.go
src/cmd/cgo/out.go

index b5009d43cee03a4211dc863a085db1e39308e599..8c69ad91ac7924d0d1ad52f77776121cb9afa5ab 100644 (file)
@@ -2200,3 +2200,7 @@ func test32579(t *testing.T) {
 // issue 38649
 
 var issue38649 C.netbsd_gid = 42
+
+// issue 39877
+
+var issue39877 *C.void = nil
index 6b40a255d505f1693152eded090611ff704998a0..6c221473e084d41fa2cb560e494c5473496147d9 100644 (file)
@@ -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)