Safe Transmute: Fix propagation of errors
- Make sure that the most specific Reason is the one that bubbles up when we are folding over the `Answer` tree. `Reason::DstIsBitIncompatible` is the least specific, so that should be used only when there isn't anything else available. - Small fixes where we used the wrong Reason variant. - Tiny cleanups
This commit is contained in:
parent
263a4f2cb6
commit
94ad084ac6
12 changed files with 67 additions and 52 deletions
|
@ -2751,7 +2751,8 @@ impl<'tcx> InferCtxtPrivExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||
rustc_transmute::Assume::from_const(self.infcx.tcx, obligation.param_env, trait_ref.substs.const_at(3)) else {
|
||||
span_bug!(span, "Unable to construct rustc_transmute::Assume where it was previously possible");
|
||||
};
|
||||
// FIXME(bryangarza): Need to flatten here too
|
||||
// FIXME(bryangarza): Is this enough, or should we resolve all nested
|
||||
// obligations like we do for `confirm_transmutability_candidate(...)?`
|
||||
match rustc_transmute::TransmuteTypeEnv::new(self.infcx).is_transmutable(
|
||||
obligation.cause,
|
||||
src_and_dst,
|
||||
|
@ -2780,7 +2781,6 @@ impl<'tcx> InferCtxtPrivExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
|||
rustc_transmute::Reason::DstIsPrivate => format!(
|
||||
"`{dst}` is or contains a type or field that is not visible in that scope"
|
||||
),
|
||||
// FIXME(bryangarza): Include the number of bytes of src and dst
|
||||
rustc_transmute::Reason::DstIsTooBig => {
|
||||
format!("The size of `{src}` is smaller than the size of `{dst}`")
|
||||
}
|
||||
|
|
|
@ -329,7 +329,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
|||
)
|
||||
};
|
||||
|
||||
// // FIXME(bryangarza): Check src.mutability or dst.mutability to know whether dst -> src obligation is needed
|
||||
// FIXME(bryangarza): Check src.mutability or dst.mutability to know whether dst -> src obligation is needed
|
||||
Ok(vec![make_obl(src.ty, dst.ty), make_obl(dst.ty, src.ty)])
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue