23ab1bda92
Migrate to a simplified safety analysis that does not use visibility. Closes https://github.com/rust-lang/project-safe-transmute/issues/15
58 lines
1.2 KiB
Rust
58 lines
1.2 KiB
Rust
//@ check-pass
|
|
//! The implementation should behave correctly when the `ASSUME` parameters are
|
|
//! provided indirectly through an abstraction.
|
|
|
|
#![crate_type = "lib"]
|
|
#![feature(adt_const_params)]
|
|
#![feature(transmutability)]
|
|
#![allow(dead_code, incomplete_features, non_camel_case_types)]
|
|
|
|
mod assert {
|
|
use std::mem::BikeshedIntrinsicFrom;
|
|
|
|
pub fn is_transmutable<
|
|
Src,
|
|
Dst,
|
|
const ASSUME: std::mem::Assume,
|
|
>()
|
|
where
|
|
Dst: BikeshedIntrinsicFrom<
|
|
Src,
|
|
ASSUME,
|
|
>,
|
|
{}
|
|
}
|
|
|
|
fn direct() {
|
|
assert::is_transmutable::<(), (), { std::mem::Assume::NOTHING }>();
|
|
}
|
|
|
|
fn via_const() {
|
|
const FALSE: bool = false;
|
|
|
|
assert::is_transmutable::<(), (), { std::mem::Assume::NOTHING }>();
|
|
}
|
|
|
|
fn via_associated_const() {
|
|
trait Trait {
|
|
const FALSE: bool = true;
|
|
}
|
|
|
|
struct Ty;
|
|
|
|
impl Trait for Ty {}
|
|
|
|
assert::is_transmutable::<
|
|
(),
|
|
(),
|
|
{
|
|
std::mem::Assume {
|
|
alignment: {Ty::FALSE},
|
|
lifetimes: {Ty::FALSE},
|
|
safety: {Ty::FALSE},
|
|
validity: {Ty::FALSE},
|
|
}
|
|
}
|
|
>();
|
|
}
|