}
        } else {
                c = new(hchan)
-               c.buf = newarray(elem, uintptr(size))
+               c.buf = newarray(elem, int(size))
        }
        c.elemsize = uint16(elem.size)
        c.elemtype = elem
 
        // If hint is large zeroing this memory could take a while.
        buckets := bucket
        if B != 0 {
-               buckets = newarray(t.bucket, uintptr(1)<<B)
+               buckets = newarray(t.bucket, 1<<B)
        }
 
        // initialize Hmap
                throw("evacuation not done in time")
        }
        oldbuckets := h.buckets
-       newbuckets := newarray(t.bucket, uintptr(1)<<(h.B+1))
+       newbuckets := newarray(t.bucket, 1<<(h.B+1))
        flags := h.flags &^ (iterator | oldIterator)
        if h.flags&iterator != 0 {
                flags |= oldIterator
 
        return newobject(typ)
 }
 
-// implementation of make builtin for slices
-func newarray(typ *_type, n uintptr) unsafe.Pointer {
-       if int(n) < 0 || n > maxSliceCap(typ.size) {
+// newarray allocates an array of n elements of type typ.
+func newarray(typ *_type, n int) unsafe.Pointer {
+       if n < 0 || uintptr(n) > maxSliceCap(typ.size) {
                panic(plainError("runtime: allocation size out of range"))
        }
-       return mallocgc(typ.size*n, typ, true)
+       return mallocgc(typ.size*uintptr(n), typ, true)
 }
 
 //go:linkname reflect_unsafe_NewArray reflect.unsafe_NewArray
-func reflect_unsafe_NewArray(typ *_type, n uintptr) unsafe.Pointer {
+func reflect_unsafe_NewArray(typ *_type, n int) unsafe.Pointer {
        return newarray(typ, n)
 }