diff --git a/feature_reflect_slice.go b/feature_reflect_slice.go index 1a1a2ab..51a8dae 100644 --- a/feature_reflect_slice.go +++ b/feature_reflect_slice.go @@ -127,10 +127,10 @@ func growOne(slice *sliceHeader, sliceType reflect.Type, elementType reflect.Typ newVal := reflect.MakeSlice(sliceType, newLen, newCap) dst := unsafe.Pointer(newVal.Pointer()) // copy old array into new array - originalBytesCount := uintptr(slice.Len) * elementType.Size() - srcPtr := (*[1 << 49]byte)(slice.Data) - dstPtr := (*[1 << 49]byte)(dst) - copy(dstPtr[:originalBytesCount], srcPtr[:originalBytesCount]) + originalBytesCount := slice.Len * int(elementType.Size()) + srcSliceHeader := (unsafe.Pointer)(&sliceHeader{slice.Data, originalBytesCount, originalBytesCount}) + dstSliceHeader := (unsafe.Pointer)(&sliceHeader{dst, originalBytesCount, originalBytesCount}) + copy(*(*[]byte)(dstSliceHeader), *(*[]byte)(srcSliceHeader)) slice.Data = dst slice.Len = newLen slice.Cap = newCap diff --git a/jsoniter_interface_test.go b/jsoniter_interface_test.go index e5f3283..3245d68 100644 --- a/jsoniter_interface_test.go +++ b/jsoniter_interface_test.go @@ -11,6 +11,7 @@ import ( ) func Test_write_empty_interface_via_placeholder(t *testing.T) { + fmt.Println(^uint(0) >> 1) should := require.New(t) m := map[uint32]interface{}{1:"hello"} inf := reflect.ValueOf(m).MapIndex(reflect.ValueOf(uint32(1))).Interface()