Commit 03e6a88e authored by Matthew Dempsky's avatar Matthew Dempsky Committed by Ian Lance Taylor

cmd/cgo: iterate over names in deterministic order

This makes GCC behavior (and cgo build failures) deterministic.

Fixes #8487.

Ran this shell command on linux/amd64 (Ubuntu 12.04) before and
after this change:

    for x in `seq 100`; do
      go tool cgo -debug-gcc=true issue8441.go 2>&1 | md5sum
    done | sort | uniq -c

Before:
    67 2cdcb8c7c4e290f7d9009abc581b83dd  -
    10 9a55390df94f7cec6d810f3e20590789  -
    10 acfad22140d43d9b9517bbc5dfc3c0df  -
    13 c337f8fee2304b3a8e3158a4362d8698  -

After:
    100 785c316cbcbcd50896695050e2fa23c1  -

LGTM=minux, iant
R=golang-codereviews, bradfitz, minux, iant
CC=golang-codereviews
https://golang.org/cl/126990043
parent fce63888
...@@ -229,7 +229,8 @@ func (p *Package) guessKinds(f *File) []*Name { ...@@ -229,7 +229,8 @@ func (p *Package) guessKinds(f *File) []*Name {
// Determine kinds for names we already know about, // Determine kinds for names we already know about,
// like #defines or 'struct foo', before bothering with gcc. // like #defines or 'struct foo', before bothering with gcc.
var names, needType []*Name var names, needType []*Name
for _, n := range f.Name { for _, key := range nameKeys(f.Name) {
n := f.Name[key]
// If we've already found this name as a #define // If we've already found this name as a #define
// and we can translate it as a constant value, do so. // and we can translate it as a constant value, do so.
if n.Define != "" { if n.Define != "" {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment