diff --git a/src/librustc/diagnostics.rs b/src/librustc/diagnostics.rs index d073a4dd0c9c2..4bc52e82f9be1 100644 --- a/src/librustc/diagnostics.rs +++ b/src/librustc/diagnostics.rs @@ -1552,7 +1552,8 @@ fn takes_u8(_: u8) {} fn main() { unsafe { takes_u8(::std::mem::transmute(0u16)); } - // error: transmute called with types of different sizes + // error: cannot transmute between types of different sizes, + // or dependently-sized types } ``` diff --git a/src/librustc/middle/intrinsicck.rs b/src/librustc/middle/intrinsicck.rs index 2010926ede5e6..1716daaa107c4 100644 --- a/src/librustc/middle/intrinsicck.rs +++ b/src/librustc/middle/intrinsicck.rs @@ -97,11 +97,11 @@ impl<'a, 'tcx> ExprVisitor<'a, 'tcx> { format!("{} bits", size.bits()) } Ok(SizeSkeleton::Pointer { tail, .. }) => { - format!("pointer to {}", tail) + format!("pointer to `{}`", tail) } Err(LayoutError::Unknown(bad)) => { if bad == ty { - "this type's size can vary".to_owned() + "this type does not have a fixed size".to_owned() } else { format!("size can vary because of {}", bad) } @@ -110,11 +110,16 @@ impl<'a, 'tcx> ExprVisitor<'a, 'tcx> { } }; - struct_span_err!(self.tcx.sess, span, E0512, - "transmute called with types of different sizes") - .note(&format!("source type: {} ({})", from, skeleton_string(from, sk_from))) - .note(&format!("target type: {} ({})", to, skeleton_string(to, sk_to))) - .emit(); + let mut err = struct_span_err!(self.tcx.sess, span, E0512, + "cannot transmute between types of different sizes, \ + or dependently-sized types"); + if from == to { + err.note(&format!("`{}` does not have a fixed size", from)); + } else { + err.note(&format!("source type: `{}` ({})", from, skeleton_string(from, sk_from))) + .note(&format!("target type: `{}` ({})", to, skeleton_string(to, sk_to))); + } + err.emit() } } diff --git a/src/test/ui/error-codes/E0512.stderr b/src/test/ui/error-codes/E0512.stderr index 5b07afc29190c..998f6403f0b29 100644 --- a/src/test/ui/error-codes/E0512.stderr +++ b/src/test/ui/error-codes/E0512.stderr @@ -1,11 +1,11 @@ -error[E0512]: transmute called with types of different sizes +error[E0512]: cannot transmute between types of different sizes, or dependently-sized types --> $DIR/E0512.rs:4:23 | LL | unsafe { takes_u8(::std::mem::transmute(0u16)); } //~ ERROR E0512 | ^^^^^^^^^^^^^^^^^^^^^ | - = note: source type: u16 (16 bits) - = note: target type: u8 (8 bits) + = note: source type: `u16` (16 bits) + = note: target type: `u8` (8 bits) error: aborting due to previous error diff --git a/src/test/ui/issues/issue-21174.rs b/src/test/ui/issues/issue-21174.rs index 4f835cde641e7..07827425116af 100644 --- a/src/test/ui/issues/issue-21174.rs +++ b/src/test/ui/issues/issue-21174.rs @@ -5,7 +5,7 @@ trait Trait<'a> { fn foo<'a, T: Trait<'a>>(value: T::A) { let new: T::B = unsafe { std::mem::transmute(value) }; -//~^ ERROR: transmute called with types of different sizes +//~^ ERROR: cannot transmute between types of different sizes, or dependently-sized types } fn main() { } diff --git a/src/test/ui/issues/issue-21174.stderr b/src/test/ui/issues/issue-21174.stderr index 5ff72aef550c3..5ac5a8665bc69 100644 --- a/src/test/ui/issues/issue-21174.stderr +++ b/src/test/ui/issues/issue-21174.stderr @@ -1,11 +1,11 @@ -error[E0512]: transmute called with types of different sizes +error[E0512]: cannot transmute between types of different sizes, or dependently-sized types --> $DIR/issue-21174.rs:7:30 | LL | let new: T::B = unsafe { std::mem::transmute(value) }; | ^^^^^^^^^^^^^^^^^^^ | - = note: source type: >::A (size can vary because of ::A) - = note: target type: >::B (size can vary because of ::B) + = note: source type: `>::A` (size can vary because of ::A) + = note: target type: `>::B` (size can vary because of ::B) error: aborting due to previous error diff --git a/src/test/ui/issues/issue-28625.rs b/src/test/ui/issues/issue-28625.rs index 46cbb45e97bb6..15a6a63d5ef0b 100644 --- a/src/test/ui/issues/issue-28625.rs +++ b/src/test/ui/issues/issue-28625.rs @@ -9,7 +9,7 @@ struct ArrayPeano { } fn foo(a: &ArrayPeano) -> &[T] where T: Bar { - unsafe { std::mem::transmute(a) } //~ ERROR transmute called with types of different sizes + unsafe { std::mem::transmute(a) } //~ ERROR cannot transmute between types of different sizes } impl Bar for () { diff --git a/src/test/ui/issues/issue-28625.stderr b/src/test/ui/issues/issue-28625.stderr index ae383b44511bd..36cb47944f234 100644 --- a/src/test/ui/issues/issue-28625.stderr +++ b/src/test/ui/issues/issue-28625.stderr @@ -1,11 +1,11 @@ -error[E0512]: transmute called with types of different sizes +error[E0512]: cannot transmute between types of different sizes, or dependently-sized types --> $DIR/issue-28625.rs:12:14 | -LL | unsafe { std::mem::transmute(a) } //~ ERROR transmute called with types of different sizes +LL | unsafe { std::mem::transmute(a) } //~ ERROR cannot transmute between types of different sizes | ^^^^^^^^^^^^^^^^^^^ | - = note: source type: &ArrayPeano (N bits) - = note: target type: &[T] (N bits) + = note: source type: `&ArrayPeano` (N bits) + = note: target type: `&[T]` (N bits) error: aborting due to previous error diff --git a/src/test/ui/issues/issue-32377.rs b/src/test/ui/issues/issue-32377.rs index 6f073bcce6108..555f6abd791ac 100644 --- a/src/test/ui/issues/issue-32377.rs +++ b/src/test/ui/issues/issue-32377.rs @@ -13,7 +13,7 @@ struct Bar { fn foo(x: [usize; 2]) -> Bar { unsafe { mem::transmute(x) } - //~^ ERROR transmute called with types of different sizes + //~^ ERROR cannot transmute between types of different sizes, or dependently-sized types } fn main() {} diff --git a/src/test/ui/issues/issue-32377.stderr b/src/test/ui/issues/issue-32377.stderr index 72d94721d887f..5e870eb3e8d17 100644 --- a/src/test/ui/issues/issue-32377.stderr +++ b/src/test/ui/issues/issue-32377.stderr @@ -1,11 +1,11 @@ -error[E0512]: transmute called with types of different sizes +error[E0512]: cannot transmute between types of different sizes, or dependently-sized types --> $DIR/issue-32377.rs:15:14 | LL | unsafe { mem::transmute(x) } | ^^^^^^^^^^^^^^ | - = note: source type: [usize; 2] (N bits) - = note: target type: Bar (N bits) + = note: source type: `[usize; 2]` (N bits) + = note: target type: `Bar` (N bits) error: aborting due to previous error diff --git a/src/test/ui/packed-struct/packed-struct-generic-transmute.rs b/src/test/ui/packed-struct/packed-struct-generic-transmute.rs index a2502a53c9d38..c6264b6d2b32e 100644 --- a/src/test/ui/packed-struct/packed-struct-generic-transmute.rs +++ b/src/test/ui/packed-struct/packed-struct-generic-transmute.rs @@ -3,7 +3,7 @@ // the error points to the start of the file, not the line with the // transmute -// error-pattern: transmute called with types of different sizes +// error-pattern: cannot transmute between types of different sizes, or dependently-sized types use std::mem; diff --git a/src/test/ui/packed-struct/packed-struct-generic-transmute.stderr b/src/test/ui/packed-struct/packed-struct-generic-transmute.stderr index b66cb039b802c..744c832dbb407 100644 --- a/src/test/ui/packed-struct/packed-struct-generic-transmute.stderr +++ b/src/test/ui/packed-struct/packed-struct-generic-transmute.stderr @@ -1,11 +1,11 @@ -error[E0512]: transmute called with types of different sizes +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) + = note: source type: `Foo<[u8; 5], i32>` (72 bits) + = note: target type: `Oof<[u8; 5], i32>` (96 bits) error: aborting due to previous error diff --git a/src/test/ui/packed-struct/packed-struct-transmute.rs b/src/test/ui/packed-struct/packed-struct-transmute.rs index 3d1580004b80b..a7d284025d7a0 100644 --- a/src/test/ui/packed-struct/packed-struct-transmute.rs +++ b/src/test/ui/packed-struct/packed-struct-transmute.rs @@ -4,7 +4,7 @@ // transmute // normalize-stderr-test "\d+ bits" -> "N bits" -// error-pattern: transmute called with types of different sizes +// error-pattern: cannot transmute between types of different sizes, or dependently-sized types use std::mem; diff --git a/src/test/ui/packed-struct/packed-struct-transmute.stderr b/src/test/ui/packed-struct/packed-struct-transmute.stderr index d1fb443f310ec..80a8919f77b38 100644 --- a/src/test/ui/packed-struct/packed-struct-transmute.stderr +++ b/src/test/ui/packed-struct/packed-struct-transmute.stderr @@ -1,11 +1,11 @@ -error[E0512]: transmute called with types of different sizes +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) + = note: source type: `Foo` (N bits) + = note: target type: `Oof` (N bits) error: aborting due to previous error diff --git a/src/test/ui/transmute-equal-assoc-types.rs b/src/test/ui/transmute-equal-assoc-types.rs new file mode 100644 index 0000000000000..6f357543e5c44 --- /dev/null +++ b/src/test/ui/transmute-equal-assoc-types.rs @@ -0,0 +1,9 @@ +trait Foo { + type Bar; +} + +unsafe fn noop(foo: F::Bar) -> F::Bar { + ::std::mem::transmute(foo) //~ ERROR cannot transmute between types of different sizes +} + +fn main() {} diff --git a/src/test/ui/transmute-equal-assoc-types.stderr b/src/test/ui/transmute-equal-assoc-types.stderr new file mode 100644 index 0000000000000..46bbf1c185889 --- /dev/null +++ b/src/test/ui/transmute-equal-assoc-types.stderr @@ -0,0 +1,11 @@ +error[E0512]: cannot transmute between types of different sizes, or dependently-sized types + --> $DIR/transmute-equal-assoc-types.rs:6:5 + | +LL | ::std::mem::transmute(foo) //~ ERROR cannot transmute between types of different sizes + | ^^^^^^^^^^^^^^^^^^^^^ + | + = note: `::Bar` does not have a fixed size + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0512`. diff --git a/src/test/ui/transmute/main.rs b/src/test/ui/transmute/main.rs index 6c6fa47a50d6a..ea233a47a78c1 100644 --- a/src/test/ui/transmute/main.rs +++ b/src/test/ui/transmute/main.rs @@ -1,5 +1,5 @@ -// normalize-stderr-32bit: "&str \(64 bits\)" -> "&str ($$STR bits)" -// normalize-stderr-64bit: "&str \(128 bits\)" -> "&str ($$STR bits)" +// normalize-stderr-32bit: "`&str` \(64 bits\)" -> "`&str` ($$STR bits)" +// normalize-stderr-64bit: "`&str` \(128 bits\)" -> "`&str` ($$STR bits)" @@ -13,20 +13,20 @@ pub trait TypeConstructor<'a> { unsafe fn transmute_lifetime<'a, 'b, C>(x: >::T) -> >::T where for<'z> C: TypeConstructor<'z> { - transmute(x) //~ ERROR transmute called with types of different sizes + transmute(x) //~ ERROR cannot transmute between types of different sizes } unsafe fn sizes() { - let x: u8 = transmute(10u16); //~ ERROR transmute called with types of different sizes + let x: u8 = transmute(10u16); //~ ERROR cannot transmute between types of different sizes } unsafe fn ptrs() { - let x: u8 = transmute("test"); //~ ERROR transmute called with types of different sizes + 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 transmute called with types of different sizes + 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 index 9a344747e8fce..f4e88fc860acd 100644 --- a/src/test/ui/transmute/main.stderr +++ b/src/test/ui/transmute/main.stderr @@ -1,38 +1,38 @@ -error[E0512]: transmute called with types of different sizes +error[E0512]: cannot transmute between types of different sizes, or dependently-sized types --> $DIR/main.rs:16:5 | -LL | transmute(x) //~ ERROR transmute called with types of different sizes +LL | transmute(x) //~ ERROR cannot transmute between types of different sizes | ^^^^^^^^^ | - = note: source type: >::T (size can vary because of ::T) - = note: target type: >::T (size can vary because of ::T) + = note: source type: `>::T` (size can vary because of ::T) + = note: target type: `>::T` (size can vary because of ::T) -error[E0512]: transmute called with types of different sizes +error[E0512]: cannot transmute between types of different sizes, or dependently-sized types --> $DIR/main.rs:20:17 | -LL | let x: u8 = transmute(10u16); //~ ERROR transmute called with types of different sizes +LL | let x: u8 = transmute(10u16); //~ ERROR cannot transmute between types of different sizes | ^^^^^^^^^ | - = note: source type: u16 (16 bits) - = note: target type: u8 (8 bits) + = note: source type: `u16` (16 bits) + = note: target type: `u8` (8 bits) -error[E0512]: transmute called with types of different sizes +error[E0512]: cannot transmute between types of different sizes, or dependently-sized types --> $DIR/main.rs:24:17 | -LL | let x: u8 = transmute("test"); //~ ERROR transmute called with types of different sizes +LL | let x: u8 = transmute("test"); //~ ERROR cannot transmute between types of different sizes | ^^^^^^^^^ | - = note: source type: &str ($STR bits) - = note: target type: u8 (8 bits) + = note: source type: `&str` ($STR bits) + = note: target type: `u8` (8 bits) -error[E0512]: transmute called with types of different sizes +error[E0512]: cannot transmute between types of different sizes, or dependently-sized types --> $DIR/main.rs:29:18 | -LL | let x: Foo = transmute(10); //~ ERROR transmute called with types of different sizes +LL | let x: Foo = transmute(10); //~ ERROR cannot transmute between types of different sizes | ^^^^^^^^^ | - = note: source type: i32 (32 bits) - = note: target type: Foo (0 bits) + = note: source type: `i32` (32 bits) + = note: target type: `Foo` (0 bits) error: aborting due to 4 previous errors diff --git a/src/test/ui/transmute/transmute-different-sizes.rs b/src/test/ui/transmute/transmute-different-sizes.rs index 00bdd8c0230ac..690decf639285 100644 --- a/src/test/ui/transmute/transmute-different-sizes.rs +++ b/src/test/ui/transmute/transmute-different-sizes.rs @@ -9,12 +9,12 @@ use std::mem::transmute; unsafe fn f() { let _: i8 = transmute(16i16); - //~^ ERROR transmute called with types of different sizes + //~^ ERROR cannot transmute between types of different sizes, or dependently-sized types } unsafe fn g(x: &T) { let _: i8 = transmute(x); - //~^ ERROR transmute called with types of different sizes + //~^ ERROR cannot transmute between types of different sizes, or dependently-sized types } trait Specializable { type Output; } @@ -25,7 +25,7 @@ impl Specializable for T { unsafe fn specializable(x: u16) -> ::Output { transmute(x) - //~^ ERROR transmute called with types of different sizes + //~^ 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 index 3fb9300c1348a..07a38df6973a1 100644 --- a/src/test/ui/transmute/transmute-different-sizes.stderr +++ b/src/test/ui/transmute/transmute-different-sizes.stderr @@ -1,29 +1,29 @@ -error[E0512]: transmute called with types of different sizes +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) + = note: source type: `i16` (N bits) + = note: target type: `i8` (N bits) -error[E0512]: transmute called with types of different sizes +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) + = note: source type: `&T` (N bits) + = note: target type: `i8` (N bits) -error[E0512]: transmute called with types of different sizes +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: ::Output (this type's size can vary) + = note: source type: `u16` (N bits) + = note: target type: `::Output` (this type does not have a fixed size) error: aborting due to 3 previous errors diff --git a/src/test/ui/transmute/transmute-fat-pointers.rs b/src/test/ui/transmute/transmute-fat-pointers.rs index f9385ef8994b2..7c1beffd14ed4 100644 --- a/src/test/ui/transmute/transmute-fat-pointers.rs +++ b/src/test/ui/transmute/transmute-fat-pointers.rs @@ -7,11 +7,11 @@ use std::mem::transmute; fn a(x: &[T]) -> &U { - unsafe { transmute(x) } //~ ERROR transmute called with types of different sizes + unsafe { transmute(x) } //~ ERROR cannot transmute between types of different sizes } fn b(x: &T) -> &U { - unsafe { transmute(x) } //~ ERROR transmute called with types of different sizes + unsafe { transmute(x) } //~ ERROR cannot transmute between types of different sizes } fn c(x: &T) -> &U { @@ -23,11 +23,11 @@ fn d(x: &[T]) -> &[U] { } fn e(x: &T) -> &U { - unsafe { transmute(x) } //~ ERROR transmute called with types of different sizes + unsafe { transmute(x) } //~ ERROR cannot transmute between types of different sizes } fn f(x: &T) -> &U { - unsafe { transmute(x) } //~ ERROR transmute called with types of different sizes + 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 index aed89ab84ca72..4b34950881a48 100644 --- a/src/test/ui/transmute/transmute-fat-pointers.stderr +++ b/src/test/ui/transmute/transmute-fat-pointers.stderr @@ -1,38 +1,38 @@ -error[E0512]: transmute called with types of different sizes +error[E0512]: cannot transmute between types of different sizes, or dependently-sized types --> $DIR/transmute-fat-pointers.rs:10:14 | -LL | unsafe { transmute(x) } //~ ERROR transmute called with types of different sizes +LL | unsafe { transmute(x) } //~ ERROR cannot transmute between types of different sizes | ^^^^^^^^^ | - = note: source type: &[T] (N bits) - = note: target type: &U (pointer to U) + = note: source type: `&[T]` (N bits) + = note: target type: `&U` (pointer to `U`) -error[E0512]: transmute called with types of different sizes +error[E0512]: cannot transmute between types of different sizes, or dependently-sized types --> $DIR/transmute-fat-pointers.rs:14:14 | -LL | unsafe { transmute(x) } //~ ERROR transmute called with types of different sizes +LL | unsafe { transmute(x) } //~ ERROR cannot transmute between types of different sizes | ^^^^^^^^^ | - = note: source type: &T (pointer to T) - = note: target type: &U (pointer to U) + = note: source type: `&T` (pointer to `T`) + = note: target type: `&U` (pointer to `U`) -error[E0512]: transmute called with types of different sizes +error[E0512]: cannot transmute between types of different sizes, or dependently-sized types --> $DIR/transmute-fat-pointers.rs:26:14 | -LL | unsafe { transmute(x) } //~ ERROR transmute called with types of different sizes +LL | unsafe { transmute(x) } //~ ERROR cannot transmute between types of different sizes | ^^^^^^^^^ | - = note: source type: &T (pointer to T) - = note: target type: &U (N bits) + = note: source type: `&T` (pointer to `T`) + = note: target type: `&U` (N bits) -error[E0512]: transmute called with types of different sizes +error[E0512]: cannot transmute between types of different sizes, or dependently-sized types --> $DIR/transmute-fat-pointers.rs:30:14 | -LL | unsafe { transmute(x) } //~ ERROR transmute called with types of different sizes +LL | unsafe { transmute(x) } //~ ERROR cannot transmute between types of different sizes | ^^^^^^^^^ | - = note: source type: &T (N bits) - = note: target type: &U (pointer to U) + = note: source type: `&T` (N bits) + = note: target type: `&U` (pointer to `U`) error: aborting due to 4 previous errors 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 index b06751f376e90..f858a199e48e3 100644 --- a/src/test/ui/transmute/transmute-from-fn-item-types-error.rs +++ b/src/test/ui/transmute/transmute-from-fn-item-types-error.rs @@ -2,7 +2,7 @@ use std::mem; unsafe fn foo() -> (i8, *const (), Option) { let i = mem::transmute(bar); - //~^ ERROR transmute called with types of different sizes + //~^ ERROR cannot transmute between types of different sizes, or dependently-sized types let p = mem::transmute(foo); @@ -19,7 +19,7 @@ unsafe fn foo() -> (i8, *const (), Option) { unsafe fn bar() { // Error as usual if the resulting type is not pointer-sized. mem::transmute::<_, u8>(main); - //~^ ERROR transmute called with types of different sizes + //~^ ERROR cannot transmute between types of different sizes, or dependently-sized types mem::transmute::<_, *mut ()>(foo); 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 index 07e8c60e91e16..d08078bcfbaea 100644 --- a/src/test/ui/transmute/transmute-from-fn-item-types-error.stderr +++ b/src/test/ui/transmute/transmute-from-fn-item-types-error.stderr @@ -1,11 +1,11 @@ -error[E0512]: transmute called with types of different sizes +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) + = 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 @@ -27,14 +27,14 @@ LL | let of = mem::transmute(main); = note: target type: std::option::Option = help: cast with `as` to a pointer instead -error[E0512]: transmute called with types of different sizes +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) + = 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 diff --git a/src/test/ui/transmute/transmute-impl.rs b/src/test/ui/transmute/transmute-impl.rs index 23fddfe038e29..df422bda166c1 100644 --- a/src/test/ui/transmute/transmute-impl.rs +++ b/src/test/ui/transmute/transmute-impl.rs @@ -18,7 +18,7 @@ impl Foo { fn n(x: &T) -> &isize { // Not OK here, because T : Sized is not in scope. - unsafe { transmute(x) } //~ ERROR transmute called with types of different sizes + unsafe { transmute(x) } //~ ERROR cannot transmute between types of different sizes } } diff --git a/src/test/ui/transmute/transmute-impl.stderr b/src/test/ui/transmute/transmute-impl.stderr index ad46c24e9c6c1..8acc0aaf3ab52 100644 --- a/src/test/ui/transmute/transmute-impl.stderr +++ b/src/test/ui/transmute/transmute-impl.stderr @@ -1,11 +1,11 @@ -error[E0512]: transmute called with types of different sizes +error[E0512]: cannot transmute between types of different sizes, or dependently-sized types --> $DIR/transmute-impl.rs:21:18 | -LL | unsafe { transmute(x) } //~ ERROR transmute called with types of different sizes +LL | unsafe { transmute(x) } //~ ERROR cannot transmute between types of different sizes | ^^^^^^^^^ | - = note: source type: &T (pointer to T) - = note: target type: &isize (N bits) + = note: source type: `&T` (pointer to `T`) + = note: target type: `&isize` (N bits) error: aborting due to previous error diff --git a/src/test/ui/transmute/transmute-type-parameters.rs b/src/test/ui/transmute/transmute-type-parameters.rs index 812386cf1653a..5f44b2d0f0163 100644 --- a/src/test/ui/transmute/transmute-type-parameters.rs +++ b/src/test/ui/transmute/transmute-type-parameters.rs @@ -4,17 +4,17 @@ use std::mem::transmute; unsafe fn f(x: T) { let _: i32 = transmute(x); -//~^ ERROR transmute called with types of different sizes +//~^ ERROR cannot transmute between types of different sizes, or dependently-sized types } unsafe fn g(x: (T, i32)) { let _: i32 = transmute(x); -//~^ ERROR transmute called with types of different sizes +//~^ ERROR cannot transmute between types of different sizes, or dependently-sized types } unsafe fn h(x: [T; 10]) { let _: i32 = transmute(x); -//~^ ERROR transmute called with types of different sizes +//~^ ERROR cannot transmute between types of different sizes, or dependently-sized types } struct Bad { @@ -23,7 +23,7 @@ struct Bad { unsafe fn i(x: Bad) { let _: i32 = transmute(x); -//~^ ERROR transmute called with types of different sizes +//~^ ERROR cannot transmute between types of different sizes, or dependently-sized types } enum Worse { @@ -33,12 +33,12 @@ enum Worse { unsafe fn j(x: Worse) { let _: i32 = transmute(x); -//~^ ERROR transmute called with types of different sizes +//~^ ERROR cannot transmute between types of different sizes, or dependently-sized types } unsafe fn k(x: Option) { let _: i32 = transmute(x); -//~^ ERROR transmute called with types of different sizes +//~^ 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 index c7cdf31dcd56c..a355a1bf31833 100644 --- a/src/test/ui/transmute/transmute-type-parameters.stderr +++ b/src/test/ui/transmute/transmute-type-parameters.stderr @@ -1,56 +1,56 @@ -error[E0512]: transmute called with types of different sizes +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's size can vary) - = note: target type: i32 (32 bits) + = note: source type: `T` (this type does not have a fixed size) + = note: target type: `i32` (32 bits) -error[E0512]: transmute called with types of different sizes +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) + = note: source type: `(T, i32)` (size can vary because of T) + = note: target type: `i32` (32 bits) -error[E0512]: transmute called with types of different sizes +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) + = note: source type: `[T; 10]` (size can vary because of T) + = note: target type: `i32` (32 bits) -error[E0512]: transmute called with types of different sizes +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 (size can vary because of T) - = note: target type: i32 (32 bits) + = note: source type: `Bad` (size can vary because of T) + = note: target type: `i32` (32 bits) -error[E0512]: transmute called with types of different sizes +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 (size can vary because of T) - = note: target type: i32 (32 bits) + = note: source type: `Worse` (size can vary because of T) + = note: target type: `i32` (32 bits) -error[E0512]: transmute called with types of different sizes +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: std::option::Option (size can vary because of T) - = note: target type: i32 (32 bits) + = note: source type: `std::option::Option` (size can vary because of T) + = note: target type: `i32` (32 bits) error: aborting due to 6 previous errors