@@ -333,14 +333,19 @@ impl ConstMethods<'tcx> for CodegenCx<'ll, 'tcx> {
333
333
offset : Size ,
334
334
) -> PlaceRef < ' tcx , & ' ll Value > {
335
335
assert_eq ! ( alloc. align, layout. align. abi) ;
336
- let init = const_alloc_to_llvm ( self , alloc) ;
337
- let base_addr = self . static_addr_of ( init, alloc. align , None ) ;
338
-
339
- let llval = unsafe { llvm:: LLVMConstInBoundsGEP (
340
- self . const_bitcast ( base_addr, self . type_i8p ( ) ) ,
341
- & self . const_usize ( offset. bytes ( ) ) ,
342
- 1 ,
343
- ) } ;
336
+ let llval = if layout. size == Size :: ZERO {
337
+ let llval = self . const_usize ( alloc. align . bytes ( ) ) ;
338
+ unsafe { llvm:: LLVMConstIntToPtr ( llval, self . type_ptr_to ( self . type_i8p ( ) ) ) }
339
+ } else {
340
+ let init = const_alloc_to_llvm ( self , alloc) ;
341
+ let base_addr = self . static_addr_of ( init, alloc. align , None ) ;
342
+
343
+ unsafe { llvm:: LLVMConstInBoundsGEP (
344
+ self . const_bitcast ( base_addr, self . type_i8p ( ) ) ,
345
+ & self . const_usize ( offset. bytes ( ) ) ,
346
+ 1 ,
347
+ ) }
348
+ } ;
344
349
let llval = self . const_bitcast ( llval, self . type_ptr_to ( layout. llvm_type ( self ) ) ) ;
345
350
PlaceRef :: new_sized ( llval, layout, alloc. align )
346
351
}
0 commit comments