Safe Transmute: Add alignment tests
This commit is contained in:
parent
94ad084ac6
commit
db3275c962
3 changed files with 76 additions and 0 deletions
23
tests/ui/transmutability/alignment/align-fail.rs
Normal file
23
tests/ui/transmutability/alignment/align-fail.rs
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
// check-fail
|
||||
#![feature(transmutability)]
|
||||
|
||||
mod assert {
|
||||
use std::mem::{Assume, BikeshedIntrinsicFrom};
|
||||
pub struct Context;
|
||||
|
||||
pub fn is_maybe_transmutable<Src, Dst>()
|
||||
where
|
||||
Dst: BikeshedIntrinsicFrom<Src, Context, {
|
||||
Assume {
|
||||
alignment: false,
|
||||
lifetimes: true,
|
||||
safety: true,
|
||||
validity: true,
|
||||
}
|
||||
}>
|
||||
{}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
assert::is_maybe_transmutable::<&'static [u8; 0], &'static [u16; 0]>(); //~ ERROR `&[u8; 0]` cannot be safely transmuted into `&[u16; 0]`
|
||||
}
|
||||
30
tests/ui/transmutability/alignment/align-fail.stderr
Normal file
30
tests/ui/transmutability/alignment/align-fail.stderr
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
error[E0277]: `&[u8; 0]` cannot be safely transmuted into `&[u16; 0]` in the defining scope of `assert::Context`
|
||||
--> $DIR/align-fail.rs:22:55
|
||||
|
|
||||
LL | ...tatic [u8; 0], &'static [u16; 0]>();
|
||||
| ^^^^^^^^^^^^^^^^^ The alignment of `&[u8; 0]` should be stricter than that of `&[u16; 0]`, but it is not
|
||||
|
|
||||
note: required by a bound in `is_maybe_transmutable`
|
||||
--> $DIR/align-fail.rs:10:14
|
||||
|
|
||||
LL | pub fn is_maybe_transmutable<Src, Dst>()
|
||||
| --------------------- required by a bound in this function
|
||||
LL | where
|
||||
LL | Dst: BikeshedIntrinsicFrom<Src, Context, {
|
||||
| ______________^
|
||||
LL | | Assume {
|
||||
LL | | alignment: false,
|
||||
LL | | lifetimes: true,
|
||||
... |
|
||||
LL | | }
|
||||
LL | | }>
|
||||
| |__________^ required by this bound in `is_maybe_transmutable`
|
||||
help: consider removing the leading `&`-reference
|
||||
|
|
||||
LL - assert::is_maybe_transmutable::<&'static [u8; 0], &'static [u16; 0]>();
|
||||
LL + assert::is_maybe_transmutable::<&'static [u8; 0], [u16; 0]>();
|
||||
|
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
23
tests/ui/transmutability/alignment/align-pass.rs
Normal file
23
tests/ui/transmutability/alignment/align-pass.rs
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
// check-pass
|
||||
#![feature(transmutability)]
|
||||
|
||||
mod assert {
|
||||
use std::mem::{Assume, BikeshedIntrinsicFrom};
|
||||
pub struct Context;
|
||||
|
||||
pub fn is_maybe_transmutable<Src, Dst>()
|
||||
where
|
||||
Dst: BikeshedIntrinsicFrom<Src, Context, {
|
||||
Assume {
|
||||
alignment: false,
|
||||
lifetimes: false,
|
||||
safety: true,
|
||||
validity: false,
|
||||
}
|
||||
}>
|
||||
{}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
assert::is_maybe_transmutable::<&'static [u16; 0], &'static [u8; 0]>();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue