Sync from rust 97c81e1b537088f1881c8894ee8579812ed9b6d1
This commit is contained in:
commit
1906ec56fc
@ -31,7 +31,7 @@ index d95b5b7f17f..00b6f0e3635 100644
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat > config.toml <<EOF
|
cat > config.toml <<EOF
|
||||||
changelog-seen = 2
|
change-id = 115898
|
||||||
|
|
||||||
[llvm]
|
[llvm]
|
||||||
ninja = false
|
ninja = false
|
||||||
|
@ -28,7 +28,7 @@ fn clif_sig_from_fn_abi<'tcx>(
|
|||||||
let inputs = fn_abi.args.iter().flat_map(|arg_abi| arg_abi.get_abi_param(tcx).into_iter());
|
let inputs = fn_abi.args.iter().flat_map(|arg_abi| arg_abi.get_abi_param(tcx).into_iter());
|
||||||
|
|
||||||
let (return_ptr, returns) = fn_abi.ret.get_abi_return(tcx);
|
let (return_ptr, returns) = fn_abi.ret.get_abi_return(tcx);
|
||||||
// Sometimes the first param is an pointer to the place where the return value needs to be stored.
|
// Sometimes the first param is a pointer to the place where the return value needs to be stored.
|
||||||
let params: Vec<_> = return_ptr.into_iter().chain(inputs).collect();
|
let params: Vec<_> = return_ptr.into_iter().chain(inputs).collect();
|
||||||
|
|
||||||
Signature { params, returns, call_conv }
|
Signature { params, returns, call_conv }
|
||||||
|
12
src/base.rs
12
src/base.rs
@ -249,17 +249,6 @@ pub(crate) fn verify_func(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn codegen_fn_body(fx: &mut FunctionCx<'_, '_, '_>, start_block: Block) {
|
fn codegen_fn_body(fx: &mut FunctionCx<'_, '_, '_>, start_block: Block) {
|
||||||
if let Err(err) =
|
|
||||||
fx.mir.post_mono_checks(fx.tcx, ty::ParamEnv::reveal_all(), |c| Ok(fx.monomorphize(c)))
|
|
||||||
{
|
|
||||||
err.emit_err(fx.tcx);
|
|
||||||
fx.bcx.append_block_params_for_function_params(fx.block_map[START_BLOCK]);
|
|
||||||
fx.bcx.switch_to_block(fx.block_map[START_BLOCK]);
|
|
||||||
// compilation should have been aborted
|
|
||||||
fx.bcx.ins().trap(TrapCode::UnreachableCodeReached);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let arg_uninhabited = fx
|
let arg_uninhabited = fx
|
||||||
.mir
|
.mir
|
||||||
.args_iter()
|
.args_iter()
|
||||||
@ -875,6 +864,7 @@ pub(crate) fn codegen_place<'tcx>(
|
|||||||
cplace = cplace.place_deref(fx);
|
cplace = cplace.place_deref(fx);
|
||||||
}
|
}
|
||||||
PlaceElem::OpaqueCast(ty) => bug!("encountered OpaqueCast({ty}) in codegen"),
|
PlaceElem::OpaqueCast(ty) => bug!("encountered OpaqueCast({ty}) in codegen"),
|
||||||
|
PlaceElem::Subtype(ty) => cplace = cplace.place_transmute_type(fx, fx.monomorphize(ty)),
|
||||||
PlaceElem::Field(field, _ty) => {
|
PlaceElem::Field(field, _ty) => {
|
||||||
cplace = cplace.place_field(fx, field);
|
cplace = cplace.place_field(fx, field);
|
||||||
}
|
}
|
||||||
|
@ -674,6 +674,16 @@ impl<'tcx> CPlace<'tcx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Used for `ProjectionElem::Subtype`, `ty` has to be monomorphized before
|
||||||
|
/// passed on.
|
||||||
|
pub(crate) fn place_transmute_type(
|
||||||
|
self,
|
||||||
|
fx: &mut FunctionCx<'_, '_, 'tcx>,
|
||||||
|
ty: Ty<'tcx>,
|
||||||
|
) -> CPlace<'tcx> {
|
||||||
|
CPlace { inner: self.inner, layout: fx.layout_of(ty) }
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn place_field(
|
pub(crate) fn place_field(
|
||||||
self,
|
self,
|
||||||
fx: &mut FunctionCx<'_, '_, 'tcx>,
|
fx: &mut FunctionCx<'_, '_, 'tcx>,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user