1 // Tests that `transmute` cannot be called on type parameters.
2 
3 use std::mem::transmute;
4 
f<T>(x: T)5 unsafe fn f<T>(x: T) {
6     let _: i32 = transmute(x);
7 //~^ ERROR cannot transmute between types of different sizes, or dependently-sized types
8 }
9 
g<T>(x: (T, i32))10 unsafe fn g<T>(x: (T, i32)) {
11     let _: i32 = transmute(x);
12 //~^ ERROR cannot transmute between types of different sizes, or dependently-sized types
13 }
14 
h<T>(x: [T; 10])15 unsafe fn h<T>(x: [T; 10]) {
16     let _: i32 = transmute(x);
17 //~^ ERROR cannot transmute between types of different sizes, or dependently-sized types
18 }
19 
20 struct Bad<T> {
21     f: T,
22 }
23 
i<T>(x: Bad<T>)24 unsafe fn i<T>(x: Bad<T>) {
25     let _: i32 = transmute(x);
26 //~^ ERROR cannot transmute between types of different sizes, or dependently-sized types
27 }
28 
29 enum Worse<T> {
30     A(T),
31     B,
32 }
33 
j<T>(x: Worse<T>)34 unsafe fn j<T>(x: Worse<T>) {
35     let _: i32 = transmute(x);
36 //~^ ERROR cannot transmute between types of different sizes, or dependently-sized types
37 }
38 
k<T>(x: Option<T>)39 unsafe fn k<T>(x: Option<T>) {
40     let _: i32 = transmute(x);
41 //~^ ERROR cannot transmute between types of different sizes, or dependently-sized types
42 }
43 
main()44 fn main() {}
45