mirror of
https://github.com/golang/go
synced 2024-10-02 16:28:34 -06:00
reflect: clear ptrToThis in Ptr when allocating result on heap
Otherwise, calling PtrTo on the result will fail. Fixes #19003 Change-Id: I8d7d1981a5d0417d5aee52740469d71e90734963 Reviewed-on: https://go-review.googlesource.com/36731 Run-TryBot: Michael Hudson-Doyle <michael.hudson@canonical.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
This commit is contained in:
parent
78e6abd244
commit
066ac428cd
@ -2478,17 +2478,24 @@ func TestNumMethodOnDDD(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestPtrTo(t *testing.T) {
|
||||
// This block of code means that the ptrToThis field of the
|
||||
// reflect data for *unsafe.Pointer is non zero, see
|
||||
// https://golang.org/issue/19003
|
||||
var x unsafe.Pointer
|
||||
var y = &x
|
||||
var z = &y
|
||||
|
||||
var i int
|
||||
|
||||
typ := TypeOf(i)
|
||||
typ := TypeOf(z)
|
||||
for i = 0; i < 100; i++ {
|
||||
typ = PtrTo(typ)
|
||||
}
|
||||
for i = 0; i < 100; i++ {
|
||||
typ = typ.Elem()
|
||||
}
|
||||
if typ != TypeOf(i) {
|
||||
t.Errorf("after 100 PtrTo and Elem, have %s, want %s", typ, TypeOf(i))
|
||||
if typ != TypeOf(z) {
|
||||
t.Errorf("after 100 PtrTo and Elem, have %s, want %s", typ, TypeOf(z))
|
||||
}
|
||||
}
|
||||
|
||||
@ -6053,7 +6060,6 @@ func TestUnaddressableField(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
type Tint int
|
||||
|
||||
type Tint2 = Tint
|
||||
@ -6086,4 +6092,3 @@ func TestAliasNames(t *testing.T) {
|
||||
t.Errorf("Talias2 print:\nhave: %s\nwant: %s", out, want)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1463,6 +1463,7 @@ func (t *rtype) ptrTo() *rtype {
|
||||
pp := *prototype
|
||||
|
||||
pp.str = resolveReflectName(newName(s, "", "", false))
|
||||
pp.ptrToThis = 0
|
||||
|
||||
// For the type structures linked into the binary, the
|
||||
// compiler provides a good hash of the string.
|
||||
|
Loading…
Reference in New Issue
Block a user