aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2020-06-26 11:26:33 -0700
committerMatthew Dempsky <mdempsky@google.com>2020-06-26 19:00:25 +0000
commita295d59d10d87ea882ddc8db6919a278b3a67d01 (patch)
treeadf7d0eee53dd770ec7f45a4629269cabbc2a951 /src
parent3c474d4164990c10c48c2b881211b6af95058be9 (diff)
downloadgo-a295d59d10d87ea882ddc8db6919a278b3a67d01.tar.xz
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>
Diffstat (limited to 'src')
-rw-r--r--src/cmd/cgo/out.go5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/cmd/cgo/out.go b/src/cmd/cgo/out.go
index 6b40a255d5..6c221473e0 100644
--- a/src/cmd/cgo/out.go
+++ b/src/cmd/cgo/out.go
@@ -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)