diff --git a/src/base.rs b/src/base.rs index 4c53a9db7bd..e3d050df4cd 100644 --- a/src/base.rs +++ b/src/base.rs @@ -825,7 +825,13 @@ fn codegen_stmt<'tcx>( }; let data = codegen_operand(fx, data); let meta = codegen_operand(fx, meta); - let ptr_val = CValue::pointer_from_data_and_meta(fx, data, meta, layout); + assert!(data.layout().ty.is_unsafe_ptr()); + assert!(layout.ty.is_unsafe_ptr()); + let ptr_val = if meta.layout().is_zst() { + data.cast_pointer_to(layout) + } else { + CValue::by_val_pair(data.load_scalar(fx), meta.load_scalar(fx), layout) + }; lval.write_cvalue(fx, ptr_val); } Rvalue::Aggregate(ref kind, ref operands) => { diff --git a/src/value_and_place.rs b/src/value_and_place.rs index eeae98ed04d..dded6df7771 100644 --- a/src/value_and_place.rs +++ b/src/value_and_place.rs @@ -95,24 +95,6 @@ impl<'tcx> CValue<'tcx> { CValue(CValueInner::ByValPair(value, extra), layout) } - /// For `AggregateKind::RawPtr`, create a pointer from its parts. - /// - /// Panics if the `layout` is not a raw pointer. - pub(crate) fn pointer_from_data_and_meta( - fx: &mut FunctionCx<'_, '_, 'tcx>, - data: CValue<'tcx>, - meta: CValue<'tcx>, - layout: TyAndLayout<'tcx>, - ) -> CValue<'tcx> { - assert!(data.layout().ty.is_unsafe_ptr()); - assert!(layout.ty.is_unsafe_ptr()); - if meta.layout().is_zst() { - data.cast_pointer_to(layout) - } else { - CValue::by_val_pair(data.load_scalar(fx), meta.load_scalar(fx), layout) - } - } - pub(crate) fn layout(&self) -> TyAndLayout<'tcx> { self.1 }