add some support for modifying what pointers point to

R=rsc
DELTA=27  (16 added, 11 deleted, 0 changed)
OCL=19130
CL=19132
diff --git a/src/lib/reflect/value.go b/src/lib/reflect/value.go
index bace93b..1877d10 100644
--- a/src/lib/reflect/value.go
+++ b/src/lib/reflect/value.go
@@ -514,6 +514,11 @@
 }
 
 func (v *PtrValueStruct) SetSub(subv Value)  {
+	a := v.typ.(PtrType).Sub().String();
+	b := subv.Type().String();
+	if a != b {
+		panicln("reflect: incompatible types in PtrValue.SetSub:", a, b);
+	}
 	*AddrToPtrAddr(v.addr) = subv.Addr();
 }