mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/cgo: print the builtin prolog after the per-file preamble
The preamble may want to #define some special symbols and then #include <sys/types.h> itself. The builtin prolog also #includes <sys/types.h>, which would break such a preamble (because the second #include will be a no-op). The use of sys/types.h in the builtin prolog is new since Go 1.1, so this should preserve the semantics of more existing cgo code than we would otherwise. It also fixes src/pkg/syscall/mkall.sh's use of go tool cgo -godefs on some Linux systems. Thanks to fullung@ for identifying the problem. Fixes #6558. R=golang-dev, iant CC=golang-dev https://golang.org/cl/14684044
This commit is contained in:
parent
9aee98def8
commit
5feb15508e
1 changed files with 3 additions and 3 deletions
|
|
@ -188,8 +188,8 @@ func (p *Package) Translate(f *File) {
|
|||
// in the file f and saves relevant renamings in f.Name[name].Define.
|
||||
func (p *Package) loadDefines(f *File) {
|
||||
var b bytes.Buffer
|
||||
b.WriteString(builtinProlog)
|
||||
b.WriteString(f.Preamble)
|
||||
b.WriteString(builtinProlog)
|
||||
stdout := p.gccDefines(b.Bytes())
|
||||
|
||||
for _, line := range strings.Split(stdout, "\n") {
|
||||
|
|
@ -301,8 +301,8 @@ func (p *Package) guessKinds(f *File) []*Name {
|
|||
}
|
||||
|
||||
var b bytes.Buffer
|
||||
b.WriteString(builtinProlog)
|
||||
b.WriteString(f.Preamble)
|
||||
b.WriteString(builtinProlog)
|
||||
b.WriteString("void __cgo__f__(void) {\n")
|
||||
|
||||
// For a #defined expression, clang silences the warning about "unused expression".
|
||||
|
|
@ -417,8 +417,8 @@ func (p *Package) loadDWARF(f *File, names []*Name) {
|
|||
// for each entry in names and then dereference the type we
|
||||
// learn for __cgo__i.
|
||||
var b bytes.Buffer
|
||||
b.WriteString(builtinProlog)
|
||||
b.WriteString(f.Preamble)
|
||||
b.WriteString(builtinProlog)
|
||||
for i, n := range names {
|
||||
fmt.Fprintf(&b, "typeof(%s) *__cgo__%d;\n", n.C, i)
|
||||
if n.Kind == "const" {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue