reflect: allow PtrValue.PointTo(nil)

(Argument: For any *PtrValue p, it should
always be possible to do: p.PointTo(p.Elem()),
even if p.Elem() is nil.)

Fixes #1028.

R=rsc
CC=golang-dev, r
https://golang.org/cl/1938044
diff --git a/src/pkg/reflect/all_test.go b/src/pkg/reflect/all_test.go
index 16b5ef6..dc01890 100644
--- a/src/pkg/reflect/all_test.go
+++ b/src/pkg/reflect/all_test.go
@@ -384,6 +384,13 @@
 	if *ip != 1234 {
 		t.Errorf("got %d, want 1234", *ip)
 	}
+
+	ip = nil
+	vp := NewValue(ip).(*PtrValue)
+	vp.PointTo(vp.Elem())
+	if ip != nil {
+		t.Errorf("got non-nil (%p), want nil", ip)
+	}
 }
 
 func TestPtrSetNil(t *testing.T) {
diff --git a/src/pkg/reflect/value.go b/src/pkg/reflect/value.go
index 56a5d69..dd677b4 100644
--- a/src/pkg/reflect/value.go
+++ b/src/pkg/reflect/value.go
@@ -1058,7 +1058,12 @@
 }
 
 // PointTo changes v to point to x.
+// If x is a nil Value, PointTo sets v to nil.
 func (v *PtrValue) PointTo(x Value) {
+	if x == nil {
+		*(**uintptr)(v.addr) = nil
+		return
+	}
 	if !x.CanSet() {
 		panic("cannot set x; cannot point to x")
 	}