safe transmute: use Assume
struct to provide analysis options
This was left as a TODO in #92268, and brings the trait more in line with what was defined in MCP411. `Assume::visibility` has been renamed to `Assume::safety`, as library safety is what's actually being assumed; visibility is just the mechanism by which it is currently checked (this may change). ref: https://github.com/rust-lang/compiler-team/issues/411 ref: https://github.com/rust-lang/rust/issues/99571
This commit is contained in:
parent
e0dc8d7801
commit
f46fffc276
77 changed files with 1321 additions and 721 deletions
|
@ -279,29 +279,17 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
|
|||
let predicate = obligation.predicate;
|
||||
|
||||
let type_at = |i| predicate.map_bound(|p| p.trait_ref.substs.type_at(i));
|
||||
let bool_at = |i| {
|
||||
predicate
|
||||
.skip_binder()
|
||||
.trait_ref
|
||||
.substs
|
||||
.const_at(i)
|
||||
.try_eval_bool(self.tcx(), obligation.param_env)
|
||||
.unwrap_or(true)
|
||||
};
|
||||
let const_at = |i| predicate.skip_binder().trait_ref.substs.const_at(i);
|
||||
|
||||
let src_and_dst = predicate.map_bound(|p| rustc_transmute::Types {
|
||||
src: p.trait_ref.substs.type_at(1),
|
||||
dst: p.trait_ref.substs.type_at(0),
|
||||
src: p.trait_ref.substs.type_at(1),
|
||||
});
|
||||
|
||||
let scope = type_at(2).skip_binder();
|
||||
|
||||
let assume = rustc_transmute::Assume {
|
||||
alignment: bool_at(3),
|
||||
lifetimes: bool_at(4),
|
||||
validity: bool_at(5),
|
||||
visibility: bool_at(6),
|
||||
};
|
||||
let assume =
|
||||
rustc_transmute::Assume::from_const(self.infcx.tcx, obligation.param_env, const_at(3));
|
||||
|
||||
let cause = obligation.cause.clone();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue