aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2018-07-25 15:24:27 -0700
committerIan Lance Taylor <iant@golang.org>2018-08-08 01:13:28 +0000
commit097d642de5f0d2010ce877116ff7071d3f19af58 (patch)
tree11b40ed2de62176e5df41e743f0f095baaa2b58a
parent0fae49df57e6b4eaaa5bc497e06df701890f9501 (diff)
downloadgo-097d642de5f0d2010ce877116ff7071d3f19af58.tar.gz
go-097d642de5f0d2010ce877116ff7071d3f19af58.zip
[release-branch.go1.10] cmd/cgo: don't resolve typedefs in -godefs mode
In -godefs mode any typedefs that appear in struct fields and the like will presumably be defined in the input file. If we resolve to the base type, those cross-references will not work. So for -godefs mode, keep the Go 1.10 behavior and don't resolve the typedefs in a loop. Fixes #26644 Change-Id: I48cf72d9eb5016353c43074e6aff6495af326f35 Reviewed-on: https://go-review.googlesource.com/125995 Reviewed-by: Keith Randall <khr@golang.org> (cherry picked from commit ead59f4bf368f13bbabea3f8a59f9f29ccdd3900) Reviewed-on: https://go-review.googlesource.com/128395 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-rw-r--r--misc/cgo/testgodefs/fieldtypedef.go18
-rwxr-xr-xmisc/cgo/testgodefs/test.bash2
-rw-r--r--src/cmd/cgo/gcc.go7
3 files changed, 26 insertions, 1 deletions
diff --git a/misc/cgo/testgodefs/fieldtypedef.go b/misc/cgo/testgodefs/fieldtypedef.go
new file mode 100644
index 0000000000..45c0bf8653
--- /dev/null
+++ b/misc/cgo/testgodefs/fieldtypedef.go
@@ -0,0 +1,18 @@
+// Copyright 2018 The Go Authors. All rights reserve d.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+//
+// +build ignore
+
+package main
+
+/*
+struct S1 { int f1; };
+struct S2 { struct S1 s1; };
+typedef struct S1 S1Type;
+typedef struct S2 S2Type;
+*/
+import "C"
+
+type S1 C.S1Type
+type S2 C.S2Type
diff --git a/misc/cgo/testgodefs/test.bash b/misc/cgo/testgodefs/test.bash
index a82ff9328f..012d007fc3 100755
--- a/misc/cgo/testgodefs/test.bash
+++ b/misc/cgo/testgodefs/test.bash
@@ -7,7 +7,7 @@
# We are testing cgo -godefs, which translates Go files that use
# import "C" into Go files with Go definitions of types defined in the
# import "C" block. Add more tests here.
-FILE_PREFIXES="anonunion issue8478"
+FILE_PREFIXES="anonunion issue8478 fieldtypedef"
RM=
for FP in $FILE_PREFIXES
diff --git a/src/cmd/cgo/gcc.go b/src/cmd/cgo/gcc.go
index 765fa87447..c646def6a7 100644
--- a/src/cmd/cgo/gcc.go
+++ b/src/cmd/cgo/gcc.go
@@ -180,6 +180,13 @@ func (p *Package) Translate(f *File) {
if len(needType) > 0 {
p.loadDWARF(f, needType)
}
+
+ // In godefs mode we're OK with the typedefs, which
+ // will presumably also be defined in the file, we
+ // don't want to resolve them to their base types.
+ if *godefs {
+ break
+ }
}
if p.rewriteCalls(f) {
// Add `import _cgo_unsafe "unsafe"` after the package statement.