diff options
author | Ian Lance Taylor <iant@golang.org> | 2018-07-25 15:24:27 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2018-08-08 01:13:28 +0000 |
commit | 097d642de5f0d2010ce877116ff7071d3f19af58 (patch) | |
tree | 11b40ed2de62176e5df41e743f0f095baaa2b58a | |
parent | 0fae49df57e6b4eaaa5bc497e06df701890f9501 (diff) | |
download | go-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.go | 18 | ||||
-rwxr-xr-x | misc/cgo/testgodefs/test.bash | 2 | ||||
-rw-r--r-- | src/cmd/cgo/gcc.go | 7 |
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. |