@@ -917,10 +917,14 @@ pub fn call_lifetime_start(cx: Block, ptr: ValueRef) {
917
917
let _icx = push_ctxt ( "lifetime_start" ) ;
918
918
let ccx = cx. ccx ( ) ;
919
919
920
- let llsize = C_u64 ( ccx, machine:: llsize_of_alloc ( ccx, val_ty ( ptr) . element_type ( ) ) ) ;
920
+ let size = machine:: llsize_of_alloc ( ccx, val_ty ( ptr) . element_type ( ) ) ;
921
+ if size == 0 {
922
+ return ;
923
+ }
924
+
921
925
let ptr = PointerCast ( cx, ptr, Type :: i8p ( ccx) ) ;
922
926
let lifetime_start = ccx. get_intrinsic ( & "llvm.lifetime.start" ) ;
923
- Call ( cx, lifetime_start, & [ llsize , ptr] , None , DebugLoc :: None ) ;
927
+ Call ( cx, lifetime_start, & [ C_u64 ( ccx , size ) , ptr] , None , DebugLoc :: None ) ;
924
928
}
925
929
926
930
pub fn call_lifetime_end ( cx : Block , ptr : ValueRef ) {
@@ -931,10 +935,14 @@ pub fn call_lifetime_end(cx: Block, ptr: ValueRef) {
931
935
let _icx = push_ctxt ( "lifetime_end" ) ;
932
936
let ccx = cx. ccx ( ) ;
933
937
934
- let llsize = C_u64 ( ccx, machine:: llsize_of_alloc ( ccx, val_ty ( ptr) . element_type ( ) ) ) ;
938
+ let size = machine:: llsize_of_alloc ( ccx, val_ty ( ptr) . element_type ( ) ) ;
939
+ if size == 0 {
940
+ return ;
941
+ }
942
+
935
943
let ptr = PointerCast ( cx, ptr, Type :: i8p ( ccx) ) ;
936
944
let lifetime_end = ccx. get_intrinsic ( & "llvm.lifetime.end" ) ;
937
- Call ( cx, lifetime_end, & [ llsize , ptr] , None , DebugLoc :: None ) ;
945
+ Call ( cx, lifetime_end, & [ C_u64 ( ccx , size ) , ptr] , None , DebugLoc :: None ) ;
938
946
}
939
947
940
948
pub fn call_memcpy ( cx : Block , dst : ValueRef , src : ValueRef , n_bytes : ValueRef , align : u32 ) {
0 commit comments