]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.10] cmd/cgo: don't resolve typedefs in -godefs mode
authorIan Lance Taylor <iant@golang.org>
Wed, 25 Jul 2018 22:24:27 +0000 (15:24 -0700)
committerIan Lance Taylor <iant@golang.org>
Wed, 8 Aug 2018 01:13:28 +0000 (01:13 +0000)
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>

misc/cgo/testgodefs/fieldtypedef.go [new file with mode: 0644]
misc/cgo/testgodefs/test.bash
src/cmd/cgo/gcc.go

diff --git a/misc/cgo/testgodefs/fieldtypedef.go b/misc/cgo/testgodefs/fieldtypedef.go
new file mode 100644 (file)
index 0000000..45c0bf8
--- /dev/null
@@ -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
index a82ff9328fe46a205b948d05c6f523e750b03a54..012d007fc3e4fb27d277e2ac97ebff5ac3cc1ba5 100755 (executable)
@@ -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
index 765fa87447c4cb700369ca8b797fd29e8f00098e..c646def6a720fdccb21042933252ebb8b24e3596 100644 (file)
@@ -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.