diff options
Diffstat (limited to '')
4 files changed, 80 insertions, 0 deletions
diff --git a/src/test/ui/packed-struct/packed-struct-generic-transmute.rs b/src/test/ui/packed-struct/packed-struct-generic-transmute.rs new file mode 100644 index 000000000..c6264b6d2 --- /dev/null +++ b/src/test/ui/packed-struct/packed-struct-generic-transmute.rs @@ -0,0 +1,27 @@ +// This assumes the packed and non-packed structs are different sizes. + +// the error points to the start of the file, not the line with the +// transmute + +// error-pattern: cannot transmute between types of different sizes, or dependently-sized types + +use std::mem; + +#[repr(packed)] +struct Foo<T,S> { + bar: T, + baz: S +} + +struct Oof<T, S> { + rab: T, + zab: S +} + +fn main() { + let foo = Foo { bar: [1u8, 2, 3, 4, 5], baz: 10i32 }; + unsafe { + let oof: Oof<[u8; 5], i32> = mem::transmute(foo); + println!("{:?} {:?}", &oof.rab[..], oof.zab); + } +} diff --git a/src/test/ui/packed-struct/packed-struct-generic-transmute.stderr b/src/test/ui/packed-struct/packed-struct-generic-transmute.stderr new file mode 100644 index 000000000..744c832db --- /dev/null +++ b/src/test/ui/packed-struct/packed-struct-generic-transmute.stderr @@ -0,0 +1,12 @@ +error[E0512]: cannot transmute between types of different sizes, or dependently-sized types + --> $DIR/packed-struct-generic-transmute.rs:24:38 + | +LL | let oof: Oof<[u8; 5], i32> = mem::transmute(foo); + | ^^^^^^^^^^^^^^ + | + = note: source type: `Foo<[u8; 5], i32>` (72 bits) + = note: target type: `Oof<[u8; 5], i32>` (96 bits) + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0512`. diff --git a/src/test/ui/packed-struct/packed-struct-transmute.rs b/src/test/ui/packed-struct/packed-struct-transmute.rs new file mode 100644 index 000000000..a7d284025 --- /dev/null +++ b/src/test/ui/packed-struct/packed-struct-transmute.rs @@ -0,0 +1,29 @@ +// This assumes the packed and non-packed structs are different sizes. + +// the error points to the start of the file, not the line with the +// transmute + +// normalize-stderr-test "\d+ bits" -> "N bits" +// error-pattern: cannot transmute between types of different sizes, or dependently-sized types + +use std::mem; + +#[repr(packed)] +struct Foo { + bar: u8, + baz: usize +} + +#[derive(Debug)] +struct Oof { + rab: u8, + zab: usize +} + +fn main() { + let foo = Foo { bar: 1, baz: 10 }; + unsafe { + let oof: Oof = mem::transmute(foo); + println!("{:?}", oof); + } +} diff --git a/src/test/ui/packed-struct/packed-struct-transmute.stderr b/src/test/ui/packed-struct/packed-struct-transmute.stderr new file mode 100644 index 000000000..80a8919f7 --- /dev/null +++ b/src/test/ui/packed-struct/packed-struct-transmute.stderr @@ -0,0 +1,12 @@ +error[E0512]: cannot transmute between types of different sizes, or dependently-sized types + --> $DIR/packed-struct-transmute.rs:26:24 + | +LL | let oof: Oof = mem::transmute(foo); + | ^^^^^^^^^^^^^^ + | + = note: source type: `Foo` (N bits) + = note: target type: `Oof` (N bits) + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0512`. |