1
0
mirror of https://github.com/golang/go synced 2024-11-26 17:16:54 -07:00

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>
This commit is contained in:
Ian Lance Taylor 2018-07-25 15:24:27 -07:00
parent 911a5fda13
commit ead59f4bf3
3 changed files with 26 additions and 1 deletions

View File

@ -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

View File

@ -7,7 +7,7 @@
# We are testing cgo -godefs, which translates Go files that use # 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" into Go files with Go definitions of types defined in the
# import "C" block. Add more tests here. # import "C" block. Add more tests here.
FILE_PREFIXES="anonunion issue8478" FILE_PREFIXES="anonunion issue8478 fieldtypedef"
RM= RM=
for FP in $FILE_PREFIXES for FP in $FILE_PREFIXES

View File

@ -180,6 +180,13 @@ func (p *Package) Translate(f *File) {
if len(needType) > 0 { if len(needType) > 0 {
p.loadDWARF(f, needType) 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) { if p.rewriteCalls(f) {
// Add `import _cgo_unsafe "unsafe"` after the package statement. // Add `import _cgo_unsafe "unsafe"` after the package statement.