reflect: declare slice as *[]unsafe.Pointer instead of *[]byte

The new garbage collector (CL 6114046) may find the fake *[]byte value
and interpret its contents as bytes rather than as potential pointers.
This may lead the garbage collector to free memory blocks that
shouldn't be freed.

R=dvyukov, rsc, dave, minux.ma, remyoudompheng, iant
CC=golang-dev
https://golang.org/cl/7000059
diff --git a/src/pkg/reflect/value.go b/src/pkg/reflect/value.go
index 93401fe..10a4c07 100644
--- a/src/pkg/reflect/value.go
+++ b/src/pkg/reflect/value.go
@@ -1491,7 +1491,7 @@
 	}
 
 	// Declare slice so that gc can see the base pointer in it.
-	var x []byte
+	var x []unsafe.Pointer
 
 	// Reinterpret as *SliceHeader to edit.
 	s := (*SliceHeader)(unsafe.Pointer(&x))
@@ -1899,7 +1899,7 @@
 	}
 
 	// Declare slice so that gc can see the base pointer in it.
-	var x []byte
+	var x []unsafe.Pointer
 
 	// Reinterpret as *SliceHeader to edit.
 	s := (*SliceHeader)(unsafe.Pointer(&x))