Commit 066ac428 authored by Michael Hudson-Doyle's avatar Michael Hudson-Doyle Committed by Russ Cox

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: 's avatarIan Lance Taylor <iant@golang.org>
Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
parent 78e6abd2
...@@ -2478,17 +2478,24 @@ func TestNumMethodOnDDD(t *testing.T) { ...@@ -2478,17 +2478,24 @@ func TestNumMethodOnDDD(t *testing.T) {
} }
func TestPtrTo(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 var i int
typ := TypeOf(i) typ := TypeOf(z)
for i = 0; i < 100; i++ { for i = 0; i < 100; i++ {
typ = PtrTo(typ) typ = PtrTo(typ)
} }
for i = 0; i < 100; i++ { for i = 0; i < 100; i++ {
typ = typ.Elem() typ = typ.Elem()
} }
if typ != TypeOf(i) { if typ != TypeOf(z) {
t.Errorf("after 100 PtrTo and Elem, have %s, want %s", typ, TypeOf(i)) t.Errorf("after 100 PtrTo and Elem, have %s, want %s", typ, TypeOf(z))
} }
} }
...@@ -6053,7 +6060,6 @@ func TestUnaddressableField(t *testing.T) { ...@@ -6053,7 +6060,6 @@ func TestUnaddressableField(t *testing.T) {
}) })
} }
type Tint int type Tint int
type Tint2 = Tint type Tint2 = Tint
...@@ -6086,4 +6092,3 @@ func TestAliasNames(t *testing.T) { ...@@ -6086,4 +6092,3 @@ func TestAliasNames(t *testing.T) {
t.Errorf("Talias2 print:\nhave: %s\nwant: %s", out, want) t.Errorf("Talias2 print:\nhave: %s\nwant: %s", out, want)
} }
} }
...@@ -1463,6 +1463,7 @@ func (t *rtype) ptrTo() *rtype { ...@@ -1463,6 +1463,7 @@ func (t *rtype) ptrTo() *rtype {
pp := *prototype pp := *prototype
pp.str = resolveReflectName(newName(s, "", "", false)) pp.str = resolveReflectName(newName(s, "", "", false))
pp.ptrToThis = 0
// For the type structures linked into the binary, the // For the type structures linked into the binary, the
// compiler provides a good hash of the string. // compiler provides a good hash of the string.
......
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