From cf2dff2b1e3fa55fa5415d524200070d0d7aacfe Mon Sep 17 00:00:00 2001 From: Albert Larsan <74931857+albertlarsan68@users.noreply.github.com> Date: Thu, 5 Jan 2023 09:13:28 +0100 Subject: Move /src/test to /tests --- .../packed-struct-generic-transmute.rs | 27 ++++++++++++++++++++ .../packed-struct-generic-transmute.stderr | 12 +++++++++ tests/ui/packed-struct/packed-struct-transmute.rs | 29 ++++++++++++++++++++++ .../packed-struct/packed-struct-transmute.stderr | 12 +++++++++ 4 files changed, 80 insertions(+) create mode 100644 tests/ui/packed-struct/packed-struct-generic-transmute.rs create mode 100644 tests/ui/packed-struct/packed-struct-generic-transmute.stderr create mode 100644 tests/ui/packed-struct/packed-struct-transmute.rs create mode 100644 tests/ui/packed-struct/packed-struct-transmute.stderr (limited to 'tests/ui/packed-struct') diff --git a/tests/ui/packed-struct/packed-struct-generic-transmute.rs b/tests/ui/packed-struct/packed-struct-generic-transmute.rs new file mode 100644 index 00000000000..c6264b6d2b3 --- /dev/null +++ b/tests/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 { + bar: T, + baz: S +} + +struct Oof { + 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/tests/ui/packed-struct/packed-struct-generic-transmute.stderr b/tests/ui/packed-struct/packed-struct-generic-transmute.stderr new file mode 100644 index 00000000000..744c832dbb4 --- /dev/null +++ b/tests/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/tests/ui/packed-struct/packed-struct-transmute.rs b/tests/ui/packed-struct/packed-struct-transmute.rs new file mode 100644 index 00000000000..a7d284025d7 --- /dev/null +++ b/tests/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/tests/ui/packed-struct/packed-struct-transmute.stderr b/tests/ui/packed-struct/packed-struct-transmute.stderr new file mode 100644 index 00000000000..80a8919f77b --- /dev/null +++ b/tests/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`. -- cgit 1.4.1-3-g733a5