diff options
author | Ian Lance Taylor <iant@golang.org> | 2021-09-15 16:11:37 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2021-09-16 23:56:28 +0000 |
commit | 265b59aefdd383fc60fcfc7a2838018b16d1d29a (patch) | |
tree | 919b9deed9cba48459251de246543b23ee2da0a5 /src | |
parent | 4efdaa7bc7220fad0177842d0009285ca429a823 (diff) | |
download | go-265b59aefdd383fc60fcfc7a2838018b16d1d29a.tar.gz go-265b59aefdd383fc60fcfc7a2838018b16d1d29a.zip |
cmd/cgo: for godefs, don't let field prefix removal cause duplicates
Fixes #48396
Change-Id: Idd7cb66536ef513806c472d394a929bc271fc26b
Reviewed-on: https://go-review.googlesource.com/c/go/+/350159
Trust: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
Reviewed-by: Matt Layher <mdlayher@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/cmd/cgo/gcc.go | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/cmd/cgo/gcc.go b/src/cmd/cgo/gcc.go index 92adb1ed9c..6b3112b41e 100644 --- a/src/cmd/cgo/gcc.go +++ b/src/cmd/cgo/gcc.go @@ -3030,6 +3030,31 @@ func upper(s string) string { // so that all fields are exported. func godefsFields(fld []*ast.Field) { prefix := fieldPrefix(fld) + + // Issue 48396: check for duplicate field names. + if prefix != "" { + names := make(map[string]bool) + fldLoop: + for _, f := range fld { + for _, n := range f.Names { + name := n.Name + if name == "_" { + continue + } + if name != prefix { + name = strings.TrimPrefix(n.Name, prefix) + } + name = upper(name) + if names[name] { + // Field name conflict: don't remove prefix. + prefix = "" + break fldLoop + } + names[name] = true + } + } + } + npad := 0 for _, f := range fld { for _, n := range f.Names { |