reflect: fix StructOf hash and string
Adjust the hash and string fields computed by StructOf to match the values that the compiler computes for a struct type with the same field names and types. This makes the reflect code match the compiler's Type::hash_for_method and Type::reflection methods. Fixes golang/go#25284 Reviewed-on: https://go-review.googlesource.com/116515 From-SVN: r261235
This commit is contained in:
parent
1336795a56
commit
1d6ccc5f29
|
@ -1,4 +1,4 @@
|
|||
8b6c7f3f9762366bab96ea95b966e93e2593be13
|
||||
baf289294a026ddd30c9e4341aff528084337763
|
||||
|
||||
The first line of this file holds the git revision number of the last
|
||||
merge done from the gofrontend repository.
|
||||
|
|
|
@ -4411,6 +4411,17 @@ func TestStructOf(t *testing.T) {
|
|||
})
|
||||
// check that type already in binary is found
|
||||
checkSameType(t, StructOf(fields[2:3]), struct{ Y uint64 }{})
|
||||
|
||||
// gccgo used to fail this test.
|
||||
type structFieldType interface{}
|
||||
checkSameType(t,
|
||||
StructOf([]StructField{
|
||||
StructField{
|
||||
Name: "F",
|
||||
Type: TypeOf((*structFieldType)(nil)).Elem(),
|
||||
},
|
||||
}),
|
||||
struct{ F structFieldType }{})
|
||||
}
|
||||
|
||||
func TestStructOfExportRules(t *testing.T) {
|
||||
|
|
|
@ -1912,7 +1912,7 @@ func isValidFieldName(fieldName string) bool {
|
|||
// This limitation may be lifted in a future version.
|
||||
func StructOf(fields []StructField) Type {
|
||||
var (
|
||||
hash = uint32(0)
|
||||
hash = uint32(12)
|
||||
size uintptr
|
||||
typalign int8
|
||||
comparable = true
|
||||
|
@ -1997,7 +1997,7 @@ func StructOf(fields []StructField) Type {
|
|||
}
|
||||
fset[name] = struct{}{}
|
||||
|
||||
repr = append(repr, (" " + ft.String())...)
|
||||
repr = append(repr, (" " + *ft.string)...)
|
||||
if f.tag != nil {
|
||||
repr = append(repr, (" " + strconv.Quote(*f.tag))...)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue