mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-28 20:16:58 +03:00
Sync from rust 1d23d06800
This commit is contained in:
+1
-1
@@ -471,7 +471,7 @@ pub(crate) fn codegen_terminator_call<'tcx>(
|
||||
true
|
||||
} else {
|
||||
instance.is_some_and(|inst| {
|
||||
fx.tcx.codegen_fn_attrs(inst.def_id()).flags.contains(CodegenFnAttrFlags::COLD)
|
||||
fx.tcx.codegen_instance_attrs(inst.def).flags.contains(CodegenFnAttrFlags::COLD)
|
||||
})
|
||||
};
|
||||
if is_cold {
|
||||
|
||||
+1
-7
@@ -853,13 +853,6 @@ fn is_wide_ptr<'tcx>(fx: &FunctionCx<'_, '_, 'tcx>, ty: Ty<'tcx>) -> bool {
|
||||
fx.bcx.ins().nop();
|
||||
}
|
||||
}
|
||||
Rvalue::ShallowInitBox(ref operand, content_ty) => {
|
||||
let content_ty = fx.monomorphize(content_ty);
|
||||
let box_layout = fx.layout_of(Ty::new_box(fx.tcx, content_ty));
|
||||
let operand = codegen_operand(fx, operand);
|
||||
let operand = operand.load_scalar(fx);
|
||||
lval.write_cvalue(fx, CValue::by_val(operand, box_layout));
|
||||
}
|
||||
Rvalue::NullaryOp(ref null_op, ty) => {
|
||||
assert!(lval.layout().ty.is_sized(fx.tcx, fx.typing_env()));
|
||||
let layout = fx.layout_of(fx.monomorphize(ty));
|
||||
@@ -948,6 +941,7 @@ fn is_wide_ptr<'tcx>(fx: &FunctionCx<'_, '_, 'tcx>, ty: Ty<'tcx>) -> bool {
|
||||
lval.write_cvalue_transmute(fx, operand);
|
||||
}
|
||||
Rvalue::CopyForDeref(_) => bug!("`CopyForDeref` in codegen"),
|
||||
Rvalue::ShallowInitBox(..) => bug!("`ShallowInitBox` in codegen"),
|
||||
}
|
||||
}
|
||||
StatementKind::StorageLive(_)
|
||||
|
||||
@@ -131,6 +131,11 @@ pub(crate) fn coerce_unsized_into<'tcx>(
|
||||
dst.write_cvalue(fx, CValue::by_val_pair(base, info, dst.layout()));
|
||||
};
|
||||
match (&src_ty.kind(), &dst_ty.kind()) {
|
||||
(ty::Pat(a, _), ty::Pat(b, _)) => {
|
||||
let src = src.cast_pat_ty_to_base(fx.layout_of(*a));
|
||||
let dst = dst.place_transmute_type(fx, *b);
|
||||
return coerce_unsized_into(fx, src, dst);
|
||||
}
|
||||
(&ty::Ref(..), &ty::Ref(..))
|
||||
| (&ty::Ref(..), &ty::RawPtr(..))
|
||||
| (&ty::RawPtr(..), &ty::RawPtr(..)) => coerce_ptr(),
|
||||
|
||||
@@ -342,6 +342,14 @@ pub(crate) fn cast_pointer_to(self, layout: TyAndLayout<'tcx>) -> Self {
|
||||
assert_eq!(self.layout().backend_repr, layout.backend_repr);
|
||||
CValue(self.0, layout)
|
||||
}
|
||||
|
||||
pub(crate) fn cast_pat_ty_to_base(self, layout: TyAndLayout<'tcx>) -> Self {
|
||||
let ty::Pat(base, _) = *self.layout().ty.kind() else {
|
||||
panic!("not a pattern type: {:#?}", self.layout())
|
||||
};
|
||||
assert_eq!(layout.ty, base);
|
||||
CValue(self.0, layout)
|
||||
}
|
||||
}
|
||||
|
||||
/// A place where you can write a value to or read a value from
|
||||
|
||||
Reference in New Issue
Block a user