Skip to content

Commit

Permalink
[release-branch.go1.8] reflect: clear ptrToThis in Ptr when allocatin…
Browse files Browse the repository at this point in the history
…g 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>
Reviewed-on: https://go-review.googlesource.com/36718
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
  • Loading branch information
mwhudson authored and rsc committed Feb 10, 2017
1 parent d84dee0 commit 7cec9a5
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 3 deletions.
13 changes: 10 additions & 3 deletions src/reflect/all_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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))
}
}

Expand Down
1 change: 1 addition & 0 deletions src/reflect/type.go
Original file line number Diff line number Diff line change
Expand Up @@ -1469,6 +1469,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.
Expand Down

0 comments on commit 7cec9a5

Please sign in to comment.