Commit 02ff646f authored by Gustavo Niemeyer's avatar Gustavo Niemeyer Committed by Russ Cox

cgo: fix enum const conflict

This change prevents enum consts from conflicting with themselves
when loaded twice in different go files.

Fixes #1400.

R=rsc
CC=golang-dev
https://golang.org/cl/3849044
parent 4bdaf59c
...@@ -372,8 +372,12 @@ func (p *Package) loadDWARF(f *File, names []*Name) { ...@@ -372,8 +372,12 @@ func (p *Package) loadDWARF(f *File, names []*Name) {
} else { } else {
n.Type = conv.Type(types[i]) n.Type = conv.Type(types[i])
if enums[i] != 0 && n.Type.EnumValues != nil { if enums[i] != 0 && n.Type.EnumValues != nil {
k := fmt.Sprintf("__cgo_enum__%d", i)
n.Kind = "const" n.Kind = "const"
n.Const = strconv.Itoa64(n.Type.EnumValues[fmt.Sprintf("__cgo_enum__%d", i)]) n.Const = strconv.Itoa64(n.Type.EnumValues[k])
// Remove injected enum to ensure the value will deep-compare
// equally in future loads of the same constant.
n.Type.EnumValues[k] = 0, false
} }
} }
} }
......
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