mirror of https://github.com/golang/go.git
reflect: omit anonymous field name from StructOf type string
This makes the reflect package match the compiler for StructOf with an embedded field. Fixes #24781 Change-Id: Ice64b167cbe0b9d30a953c5d8e2a86f3ad1158bf Reviewed-on: https://go-review.googlesource.com/c/go/+/567897 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Keith Randall <khr@golang.org> Commit-Queue: Ian Lance Taylor <iant@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com> Reviewed-by: Keith Randall <khr@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com>
This commit is contained in:
parent
f0d6ddfac0
commit
2ff89341f6
|
|
@ -6112,6 +6112,20 @@ func TestStructOfTooLarge(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestStructOfAnonymous(t *testing.T) {
|
||||
var s any = struct{ D1 }{}
|
||||
f := TypeOf(s).Field(0)
|
||||
ds := StructOf([]StructField{f})
|
||||
st := TypeOf(s)
|
||||
dt := New(ds).Elem()
|
||||
if st != dt.Type() {
|
||||
t.Errorf("StructOf returned %s, want %s", dt.Type(), st)
|
||||
}
|
||||
|
||||
// This should not panic.
|
||||
_ = dt.Interface().(struct{ D1 })
|
||||
}
|
||||
|
||||
func TestChanOf(t *testing.T) {
|
||||
// check construction and use of type not in binary
|
||||
type T string
|
||||
|
|
|
|||
|
|
@ -2287,8 +2287,9 @@ func StructOf(fields []StructField) Type {
|
|||
// Update string and hash
|
||||
name := f.Name.Name()
|
||||
hash = fnv1(hash, []byte(name)...)
|
||||
repr = append(repr, (" " + name)...)
|
||||
if f.Embedded() {
|
||||
if !f.Embedded() {
|
||||
repr = append(repr, (" " + name)...)
|
||||
} else {
|
||||
// Embedded field
|
||||
if f.Typ.Kind() == abi.Pointer {
|
||||
// Embedded ** and *interface{} are illegal
|
||||
|
|
|
|||
Loading…
Reference in New Issue