@@ -2380,7 +2380,7 @@ fn call_memmove(cx: &@block_ctxt, dst: ValueRef, src: ValueRef,
2380
2380
let src_ptr = cx. build . PointerCast ( src, T_ptr ( T_i8 ( ) ) ) ;
2381
2381
let dst_ptr = cx. build . PointerCast ( dst, T_ptr ( T_i8 ( ) ) ) ;
2382
2382
let size = cx. build . IntCast ( n_bytes, T_i32 ( ) ) ;
2383
- let align = C_int ( 0 ) ;
2383
+ let align = C_int ( 1 ) ;
2384
2384
let volatile = C_bool ( false ) ;
2385
2385
ret rslt( cx,
2386
2386
cx. build . Call ( memmove,
@@ -2411,7 +2411,12 @@ fn memmove_ty(cx: &@block_ctxt, dst: ValueRef, src: ValueRef, t: &ty::t) ->
2411
2411
if ty:: type_has_dynamic_size ( bcx_tcx ( cx) , t) {
2412
2412
let llsz = size_of ( cx, t) ;
2413
2413
ret call_memmove ( llsz. bcx , dst, src, llsz. val ) ;
2414
- } else { ret rslt ( cx, cx. build . Store ( cx. build . Load ( src) , dst) ) ; }
2414
+ } else if ty:: type_is_structural ( bcx_tcx ( cx) , t) {
2415
+ let llsz = llsize_of ( type_of ( bcx_ccx ( cx) , cx. sp , t) ) ;
2416
+ ret call_memmove ( cx, dst, src, llsz) ;
2417
+ } else {
2418
+ ret rslt ( cx, cx. build . Store ( cx. build . Load ( src) , dst) ) ;
2419
+ }
2415
2420
}
2416
2421
2417
2422
// Duplicates any heap-owned memory owned by a value of the given type.
0 commit comments