diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:19:03 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:19:03 +0000 |
commit | 64d98f8ee037282c35007b64c2649055c56af1db (patch) | |
tree | 5492bcf97fce41ee1c0b1cc2add283f3e66cdab0 /src/test/ui/transmute | |
parent | Adding debian version 1.67.1+dfsg1-1. (diff) | |
download | rustc-64d98f8ee037282c35007b64c2649055c56af1db.tar.xz rustc-64d98f8ee037282c35007b64c2649055c56af1db.zip |
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/transmute')
17 files changed, 0 insertions, 576 deletions
diff --git a/src/test/ui/transmute/lifetimes.rs b/src/test/ui/transmute/lifetimes.rs deleted file mode 100644 index 943191551..000000000 --- a/src/test/ui/transmute/lifetimes.rs +++ /dev/null @@ -1,23 +0,0 @@ -// check-pass - -use std::ptr::NonNull; - -struct Foo<'a, T: ?Sized>(&'a (), NonNull<T>); - -fn foo<'a, 'b, T: ?Sized>(x: Foo<'a, T>) -> Foo<'b, T> { - unsafe { std::mem::transmute(x) } -} - -struct Bar<'a, T: ?Sized>(&'a T); - -fn bar<'a, 'b, T: ?Sized>(x: Bar<'a, T>) -> Bar<'b, T> { - unsafe { std::mem::transmute(x) } -} - -struct Boo<'a, T: ?Sized>(&'a T, u32); - -fn boo<'a, 'b, T: ?Sized>(x: Boo<'a, T>) -> Boo<'b, T> { - unsafe { std::mem::transmute(x) } -} - -fn main() {} diff --git a/src/test/ui/transmute/main.rs b/src/test/ui/transmute/main.rs deleted file mode 100644 index da4a0a660..000000000 --- a/src/test/ui/transmute/main.rs +++ /dev/null @@ -1,29 +0,0 @@ -// normalize-stderr-32bit: "`&str` \(64 bits\)" -> "`&str` ($$STR bits)" -// normalize-stderr-64bit: "`&str` \(128 bits\)" -> "`&str` ($$STR bits)" - -use std::mem::transmute; - -pub trait TypeConstructor<'a> { - type T; -} - -unsafe fn transmute_lifetime<'a, 'b, C>(x: <C as TypeConstructor<'a>>::T) - -> <C as TypeConstructor<'b>>::T -where for<'z> C: TypeConstructor<'z> { - transmute(x) -} - -unsafe fn sizes() { - let x: u8 = transmute(10u16); //~ ERROR cannot transmute between types of different sizes -} - -unsafe fn ptrs() { - let x: u8 = transmute("test"); //~ ERROR cannot transmute between types of different sizes -} - -union Foo { x: () } -unsafe fn vary() { - let x: Foo = transmute(10); //~ ERROR cannot transmute between types of different sizes -} - -fn main() {} diff --git a/src/test/ui/transmute/main.stderr b/src/test/ui/transmute/main.stderr deleted file mode 100644 index 6cb0d7f67..000000000 --- a/src/test/ui/transmute/main.stderr +++ /dev/null @@ -1,30 +0,0 @@ -error[E0512]: cannot transmute between types of different sizes, or dependently-sized types - --> $DIR/main.rs:17:17 - | -LL | let x: u8 = transmute(10u16); - | ^^^^^^^^^ - | - = note: source type: `u16` (16 bits) - = note: target type: `u8` (8 bits) - -error[E0512]: cannot transmute between types of different sizes, or dependently-sized types - --> $DIR/main.rs:21:17 - | -LL | let x: u8 = transmute("test"); - | ^^^^^^^^^ - | - = note: source type: `&str` ($STR bits) - = note: target type: `u8` (8 bits) - -error[E0512]: cannot transmute between types of different sizes, or dependently-sized types - --> $DIR/main.rs:26:18 - | -LL | let x: Foo = transmute(10); - | ^^^^^^^^^ - | - = note: source type: `i32` (32 bits) - = note: target type: `Foo` (0 bits) - -error: aborting due to 3 previous errors - -For more information about this error, try `rustc --explain E0512`. diff --git a/src/test/ui/transmute/transmute-different-sizes.rs b/src/test/ui/transmute/transmute-different-sizes.rs deleted file mode 100644 index 690decf63..000000000 --- a/src/test/ui/transmute/transmute-different-sizes.rs +++ /dev/null @@ -1,31 +0,0 @@ -// normalize-stderr-test "\d+ bits" -> "N bits" - -// Tests that `transmute` cannot be called on types of different size. - -#![allow(warnings)] -#![feature(specialization)] - -use std::mem::transmute; - -unsafe fn f() { - let _: i8 = transmute(16i16); - //~^ ERROR cannot transmute between types of different sizes, or dependently-sized types -} - -unsafe fn g<T>(x: &T) { - let _: i8 = transmute(x); - //~^ ERROR cannot transmute between types of different sizes, or dependently-sized types -} - -trait Specializable { type Output; } - -impl<T> Specializable for T { - default type Output = u16; -} - -unsafe fn specializable<T>(x: u16) -> <T as Specializable>::Output { - transmute(x) - //~^ ERROR cannot transmute between types of different sizes, or dependently-sized types -} - -fn main() {} diff --git a/src/test/ui/transmute/transmute-different-sizes.stderr b/src/test/ui/transmute/transmute-different-sizes.stderr deleted file mode 100644 index 07a38df69..000000000 --- a/src/test/ui/transmute/transmute-different-sizes.stderr +++ /dev/null @@ -1,30 +0,0 @@ -error[E0512]: cannot transmute between types of different sizes, or dependently-sized types - --> $DIR/transmute-different-sizes.rs:11:17 - | -LL | let _: i8 = transmute(16i16); - | ^^^^^^^^^ - | - = note: source type: `i16` (N bits) - = note: target type: `i8` (N bits) - -error[E0512]: cannot transmute between types of different sizes, or dependently-sized types - --> $DIR/transmute-different-sizes.rs:16:17 - | -LL | let _: i8 = transmute(x); - | ^^^^^^^^^ - | - = note: source type: `&T` (N bits) - = note: target type: `i8` (N bits) - -error[E0512]: cannot transmute between types of different sizes, or dependently-sized types - --> $DIR/transmute-different-sizes.rs:27:5 - | -LL | transmute(x) - | ^^^^^^^^^ - | - = note: source type: `u16` (N bits) - = note: target type: `<T as Specializable>::Output` (this type does not have a fixed size) - -error: aborting due to 3 previous errors - -For more information about this error, try `rustc --explain E0512`. diff --git a/src/test/ui/transmute/transmute-fat-pointers.rs b/src/test/ui/transmute/transmute-fat-pointers.rs deleted file mode 100644 index 7c1beffd1..000000000 --- a/src/test/ui/transmute/transmute-fat-pointers.rs +++ /dev/null @@ -1,33 +0,0 @@ -// normalize-stderr-test "\d+ bits" -> "N bits" - -// Tests that are conservative around thin/fat pointer mismatches. - -#![allow(dead_code)] - -use std::mem::transmute; - -fn a<T, U: ?Sized>(x: &[T]) -> &U { - unsafe { transmute(x) } //~ ERROR cannot transmute between types of different sizes -} - -fn b<T: ?Sized, U: ?Sized>(x: &T) -> &U { - unsafe { transmute(x) } //~ ERROR cannot transmute between types of different sizes -} - -fn c<T, U>(x: &T) -> &U { - unsafe { transmute(x) } -} - -fn d<T, U>(x: &[T]) -> &[U] { - unsafe { transmute(x) } -} - -fn e<T: ?Sized, U>(x: &T) -> &U { - unsafe { transmute(x) } //~ ERROR cannot transmute between types of different sizes -} - -fn f<T, U: ?Sized>(x: &T) -> &U { - unsafe { transmute(x) } //~ ERROR cannot transmute between types of different sizes -} - -fn main() { } diff --git a/src/test/ui/transmute/transmute-fat-pointers.stderr b/src/test/ui/transmute/transmute-fat-pointers.stderr deleted file mode 100644 index e8335fcbe..000000000 --- a/src/test/ui/transmute/transmute-fat-pointers.stderr +++ /dev/null @@ -1,39 +0,0 @@ -error[E0512]: cannot transmute between types of different sizes, or dependently-sized types - --> $DIR/transmute-fat-pointers.rs:10:14 - | -LL | unsafe { transmute(x) } - | ^^^^^^^^^ - | - = note: source type: `&[T]` (N bits) - = note: target type: `&U` (pointer to `U`) - -error[E0512]: cannot transmute between types of different sizes, or dependently-sized types - --> $DIR/transmute-fat-pointers.rs:14:14 - | -LL | unsafe { transmute(x) } - | ^^^^^^^^^ - | - = note: source type: `&T` (pointer to `T`) - = note: target type: `&U` (pointer to `U`) - -error[E0512]: cannot transmute between types of different sizes, or dependently-sized types - --> $DIR/transmute-fat-pointers.rs:26:14 - | -LL | unsafe { transmute(x) } - | ^^^^^^^^^ - | - = note: source type: `&T` (pointer to `T`) - = note: target type: `&U` (N bits) - -error[E0512]: cannot transmute between types of different sizes, or dependently-sized types - --> $DIR/transmute-fat-pointers.rs:30:14 - | -LL | unsafe { transmute(x) } - | ^^^^^^^^^ - | - = note: source type: `&T` (N bits) - = note: target type: `&U` (pointer to `U`) - -error: aborting due to 4 previous errors - -For more information about this error, try `rustc --explain E0512`. diff --git a/src/test/ui/transmute/transmute-from-fn-item-types-error.rs b/src/test/ui/transmute/transmute-from-fn-item-types-error.rs deleted file mode 100644 index f858a199e..000000000 --- a/src/test/ui/transmute/transmute-from-fn-item-types-error.rs +++ /dev/null @@ -1,60 +0,0 @@ -use std::mem; - -unsafe fn foo() -> (i8, *const (), Option<fn()>) { - let i = mem::transmute(bar); - //~^ ERROR cannot transmute between types of different sizes, or dependently-sized types - - - let p = mem::transmute(foo); - //~^ ERROR can't transmute zero-sized type - - - let of = mem::transmute(main); - //~^ ERROR can't transmute zero-sized type - - - (i, p, of) -} - -unsafe fn bar() { - // Error as usual if the resulting type is not pointer-sized. - mem::transmute::<_, u8>(main); - //~^ ERROR cannot transmute between types of different sizes, or dependently-sized types - - - mem::transmute::<_, *mut ()>(foo); - //~^ ERROR can't transmute zero-sized type - - - mem::transmute::<_, fn()>(bar); - //~^ ERROR can't transmute zero-sized type - - - // No error if a coercion would otherwise occur. - mem::transmute::<fn(), usize>(main); -} - -unsafe fn baz() { - mem::transmute::<_, *mut ()>(Some(foo)); - //~^ ERROR can't transmute zero-sized type - - - mem::transmute::<_, fn()>(Some(bar)); - //~^ ERROR can't transmute zero-sized type - - - mem::transmute::<_, Option<fn()>>(Some(baz)); - //~^ ERROR can't transmute zero-sized type - - - // No error if a coercion would otherwise occur. - mem::transmute::<Option<fn()>, usize>(Some(main)); -} - -fn main() { - unsafe { - foo(); - bar(); - baz(); - } -} diff --git a/src/test/ui/transmute/transmute-from-fn-item-types-error.stderr b/src/test/ui/transmute/transmute-from-fn-item-types-error.stderr deleted file mode 100644 index aefe3fb8e..000000000 --- a/src/test/ui/transmute/transmute-from-fn-item-types-error.stderr +++ /dev/null @@ -1,92 +0,0 @@ -error[E0512]: cannot transmute between types of different sizes, or dependently-sized types - --> $DIR/transmute-from-fn-item-types-error.rs:4:13 - | -LL | let i = mem::transmute(bar); - | ^^^^^^^^^^^^^^ - | - = note: source type: `unsafe fn() {bar}` (0 bits) - = note: target type: `i8` (8 bits) - -error[E0591]: can't transmute zero-sized type - --> $DIR/transmute-from-fn-item-types-error.rs:8:13 - | -LL | let p = mem::transmute(foo); - | ^^^^^^^^^^^^^^ - | - = note: source type: unsafe fn() -> (i8, *const (), Option<fn()>) {foo} - = note: target type: *const () - = help: cast with `as` to a pointer instead - -error[E0591]: can't transmute zero-sized type - --> $DIR/transmute-from-fn-item-types-error.rs:12:14 - | -LL | let of = mem::transmute(main); - | ^^^^^^^^^^^^^^ - | - = note: source type: fn() {main} - = note: target type: Option<fn()> - = help: cast with `as` to a pointer instead - -error[E0512]: cannot transmute between types of different sizes, or dependently-sized types - --> $DIR/transmute-from-fn-item-types-error.rs:21:5 - | -LL | mem::transmute::<_, u8>(main); - | ^^^^^^^^^^^^^^^^^^^^^^^ - | - = note: source type: `fn() {main}` (0 bits) - = note: target type: `u8` (8 bits) - -error[E0591]: can't transmute zero-sized type - --> $DIR/transmute-from-fn-item-types-error.rs:25:5 - | -LL | mem::transmute::<_, *mut ()>(foo); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | - = note: source type: unsafe fn() -> (i8, *const (), Option<fn()>) {foo} - = note: target type: *mut () - = help: cast with `as` to a pointer instead - -error[E0591]: can't transmute zero-sized type - --> $DIR/transmute-from-fn-item-types-error.rs:29:5 - | -LL | mem::transmute::<_, fn()>(bar); - | ^^^^^^^^^^^^^^^^^^^^^^^^^ - | - = note: source type: unsafe fn() {bar} - = note: target type: fn() - = help: cast with `as` to a pointer instead - -error[E0591]: can't transmute zero-sized type - --> $DIR/transmute-from-fn-item-types-error.rs:38:5 - | -LL | mem::transmute::<_, *mut ()>(Some(foo)); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | - = note: source type: unsafe fn() -> (i8, *const (), Option<fn()>) {foo} - = note: target type: *mut () - = help: cast with `as` to a pointer instead - -error[E0591]: can't transmute zero-sized type - --> $DIR/transmute-from-fn-item-types-error.rs:42:5 - | -LL | mem::transmute::<_, fn()>(Some(bar)); - | ^^^^^^^^^^^^^^^^^^^^^^^^^ - | - = note: source type: unsafe fn() {bar} - = note: target type: fn() - = help: cast with `as` to a pointer instead - -error[E0591]: can't transmute zero-sized type - --> $DIR/transmute-from-fn-item-types-error.rs:46:5 - | -LL | mem::transmute::<_, Option<fn()>>(Some(baz)); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | - = note: source type: unsafe fn() {baz} - = note: target type: Option<fn()> - = help: cast with `as` to a pointer instead - -error: aborting due to 9 previous errors - -Some errors have detailed explanations: E0512, E0591. -For more information about an error, try `rustc --explain E0512`. diff --git a/src/test/ui/transmute/transmute-impl.rs b/src/test/ui/transmute/transmute-impl.rs deleted file mode 100644 index df422bda1..000000000 --- a/src/test/ui/transmute/transmute-impl.rs +++ /dev/null @@ -1,25 +0,0 @@ -// normalize-stderr-test "\d+ bits" -> "N bits" - -// Tests that are conservative around thin/fat pointer mismatches. - -#![allow(dead_code)] - -use std::mem::transmute; - -struct Foo<T: ?Sized> { - t: Box<T> -} - -impl<T: ?Sized> Foo<T> { - fn m(x: &T) -> &isize where T : Sized { - // OK here, because T : Sized is in scope. - unsafe { transmute(x) } - } - - fn n(x: &T) -> &isize { - // Not OK here, because T : Sized is not in scope. - unsafe { transmute(x) } //~ ERROR cannot transmute between types of different sizes - } -} - -fn main() { } diff --git a/src/test/ui/transmute/transmute-impl.stderr b/src/test/ui/transmute/transmute-impl.stderr deleted file mode 100644 index dd19bcd54..000000000 --- a/src/test/ui/transmute/transmute-impl.stderr +++ /dev/null @@ -1,12 +0,0 @@ -error[E0512]: cannot transmute between types of different sizes, or dependently-sized types - --> $DIR/transmute-impl.rs:21:18 - | -LL | unsafe { transmute(x) } - | ^^^^^^^^^ - | - = note: source type: `&T` (pointer to `T`) - = note: target type: `&isize` (N bits) - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0512`. diff --git a/src/test/ui/transmute/transmute-imut-to-mut.rs b/src/test/ui/transmute/transmute-imut-to-mut.rs deleted file mode 100644 index 9f3f76c1e..000000000 --- a/src/test/ui/transmute/transmute-imut-to-mut.rs +++ /dev/null @@ -1,8 +0,0 @@ -// Tests that transmuting from &T to &mut T is Undefined Behavior. - -use std::mem::transmute; - -fn main() { - let _a: &mut u8 = unsafe { transmute(&1u8) }; - //~^ ERROR transmuting &T to &mut T is undefined behavior, even if the reference is unused, consider instead using an UnsafeCell -} diff --git a/src/test/ui/transmute/transmute-imut-to-mut.stderr b/src/test/ui/transmute/transmute-imut-to-mut.stderr deleted file mode 100644 index 1e9dff3ce..000000000 --- a/src/test/ui/transmute/transmute-imut-to-mut.stderr +++ /dev/null @@ -1,10 +0,0 @@ -error: transmuting &T to &mut T is undefined behavior, even if the reference is unused, consider instead using an UnsafeCell - --> $DIR/transmute-imut-to-mut.rs:6:32 - | -LL | let _a: &mut u8 = unsafe { transmute(&1u8) }; - | ^^^^^^^^^ - | - = note: `#[deny(mutable_transmutes)]` on by default - -error: aborting due to previous error - diff --git a/src/test/ui/transmute/transmute-padding-ice.rs b/src/test/ui/transmute/transmute-padding-ice.rs deleted file mode 100644 index a1be7075a..000000000 --- a/src/test/ui/transmute/transmute-padding-ice.rs +++ /dev/null @@ -1,29 +0,0 @@ -#![crate_type = "lib"] -#![feature(transmutability)] -#![allow(dead_code)] - -mod assert { - use std::mem::{Assume, BikeshedIntrinsicFrom}; - pub struct Context; - - pub fn is_maybe_transmutable<Src, Dst>() - where - Dst: BikeshedIntrinsicFrom< - Src, - Context, - { Assume { alignment: true, lifetimes: true, safety: true, validity: true } }, - >, - { - } -} - -fn test() { - #[repr(C, align(2))] - struct A(u8, u8); - - #[repr(C)] - struct B(u8, u8); - - assert::is_maybe_transmutable::<B, A>(); - //~^ ERROR cannot be safely transmuted -} diff --git a/src/test/ui/transmute/transmute-padding-ice.stderr b/src/test/ui/transmute/transmute-padding-ice.stderr deleted file mode 100644 index c9233890f..000000000 --- a/src/test/ui/transmute/transmute-padding-ice.stderr +++ /dev/null @@ -1,24 +0,0 @@ -error[E0277]: `B` cannot be safely transmuted into `A` in the defining scope of `assert::Context`. - --> $DIR/transmute-padding-ice.rs:27:40 - | -LL | assert::is_maybe_transmutable::<B, A>(); - | ^ `B` cannot be safely transmuted into `A` in the defining scope of `assert::Context`. - | - = help: the trait `BikeshedIntrinsicFrom<B, assert::Context, Assume { alignment: true, lifetimes: true, safety: true, validity: true }>` is not implemented for `A` -note: required by a bound in `is_maybe_transmutable` - --> $DIR/transmute-padding-ice.rs:11:14 - | -LL | pub fn is_maybe_transmutable<Src, Dst>() - | --------------------- required by a bound in this -LL | where -LL | Dst: BikeshedIntrinsicFrom< - | ______________^ -LL | | Src, -LL | | Context, -LL | | { Assume { alignment: true, lifetimes: true, safety: true, validity: true } }, -LL | | >, - | |_________^ required by this bound in `is_maybe_transmutable` - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/transmute/transmute-type-parameters.rs b/src/test/ui/transmute/transmute-type-parameters.rs deleted file mode 100644 index 5f44b2d0f..000000000 --- a/src/test/ui/transmute/transmute-type-parameters.rs +++ /dev/null @@ -1,44 +0,0 @@ -// Tests that `transmute` cannot be called on type parameters. - -use std::mem::transmute; - -unsafe fn f<T>(x: T) { - let _: i32 = transmute(x); -//~^ ERROR cannot transmute between types of different sizes, or dependently-sized types -} - -unsafe fn g<T>(x: (T, i32)) { - let _: i32 = transmute(x); -//~^ ERROR cannot transmute between types of different sizes, or dependently-sized types -} - -unsafe fn h<T>(x: [T; 10]) { - let _: i32 = transmute(x); -//~^ ERROR cannot transmute between types of different sizes, or dependently-sized types -} - -struct Bad<T> { - f: T, -} - -unsafe fn i<T>(x: Bad<T>) { - let _: i32 = transmute(x); -//~^ ERROR cannot transmute between types of different sizes, or dependently-sized types -} - -enum Worse<T> { - A(T), - B, -} - -unsafe fn j<T>(x: Worse<T>) { - let _: i32 = transmute(x); -//~^ ERROR cannot transmute between types of different sizes, or dependently-sized types -} - -unsafe fn k<T>(x: Option<T>) { - let _: i32 = transmute(x); -//~^ ERROR cannot transmute between types of different sizes, or dependently-sized types -} - -fn main() {} diff --git a/src/test/ui/transmute/transmute-type-parameters.stderr b/src/test/ui/transmute/transmute-type-parameters.stderr deleted file mode 100644 index 220b929d4..000000000 --- a/src/test/ui/transmute/transmute-type-parameters.stderr +++ /dev/null @@ -1,57 +0,0 @@ -error[E0512]: cannot transmute between types of different sizes, or dependently-sized types - --> $DIR/transmute-type-parameters.rs:6:18 - | -LL | let _: i32 = transmute(x); - | ^^^^^^^^^ - | - = note: source type: `T` (this type does not have a fixed size) - = note: target type: `i32` (32 bits) - -error[E0512]: cannot transmute between types of different sizes, or dependently-sized types - --> $DIR/transmute-type-parameters.rs:11:18 - | -LL | let _: i32 = transmute(x); - | ^^^^^^^^^ - | - = note: source type: `(T, i32)` (size can vary because of T) - = note: target type: `i32` (32 bits) - -error[E0512]: cannot transmute between types of different sizes, or dependently-sized types - --> $DIR/transmute-type-parameters.rs:16:18 - | -LL | let _: i32 = transmute(x); - | ^^^^^^^^^ - | - = note: source type: `[T; 10]` (size can vary because of T) - = note: target type: `i32` (32 bits) - -error[E0512]: cannot transmute between types of different sizes, or dependently-sized types - --> $DIR/transmute-type-parameters.rs:25:18 - | -LL | let _: i32 = transmute(x); - | ^^^^^^^^^ - | - = note: source type: `Bad<T>` (size can vary because of T) - = note: target type: `i32` (32 bits) - -error[E0512]: cannot transmute between types of different sizes, or dependently-sized types - --> $DIR/transmute-type-parameters.rs:35:18 - | -LL | let _: i32 = transmute(x); - | ^^^^^^^^^ - | - = note: source type: `Worse<T>` (size can vary because of T) - = note: target type: `i32` (32 bits) - -error[E0512]: cannot transmute between types of different sizes, or dependently-sized types - --> $DIR/transmute-type-parameters.rs:40:18 - | -LL | let _: i32 = transmute(x); - | ^^^^^^^^^ - | - = note: source type: `Option<T>` (size can vary because of T) - = note: target type: `i32` (32 bits) - -error: aborting due to 6 previous errors - -For more information about this error, try `rustc --explain E0512`. |