blob: cf9064bd8f4ba2af1b54844761c5b7482f748601 [file] [log] [blame]
Jubilee Young28628f32024-09-19 23:44:361// ignore-tidy-linelength
Zalathar835fbcb2024-12-25 11:12:172//@ normalize-stderr: "values of the type `[^`]+` are too big" -> "values of the type $$REALLY_TOO_BIG are too big"
Jubilee Young28628f32024-09-19 23:44:363
4
kadminb76dd8c2023-04-04 08:41:445#![feature(transmute_generic_consts)]
kadmin648a35e2022-12-29 09:45:196#![feature(generic_const_exprs)]
7#![allow(incomplete_features)]
8
Boxyb8eedfa2024-08-19 00:14:099fn foo<const W: usize, const H: usize>(v: [[u32; H + 1]; W]) -> [[u32; W + 1]; H] {
10 unsafe {
11 std::mem::transmute(v)
12 //~^ ERROR cannot transmute
13 }
kadmin648a35e2022-12-29 09:45:1914}
15
16fn bar<const W: bool, const H: usize>(v: [[u32; H]; W]) -> [[u32; W]; H] {
Boxyb8eedfa2024-08-19 00:14:0917 //~^ ERROR: the constant `W` is not of type `usize`
Boxyb8eedfa2024-08-19 00:14:0918 unsafe {
19 std::mem::transmute(v)
20 //~^ ERROR: the constant `W` is not of type `usize`
21 }
kadmin648a35e2022-12-29 09:45:1922}
23
24fn baz<const W: usize, const H: usize>(v: [[u32; H]; W]) -> [u32; W * H * H] {
Boxyb8eedfa2024-08-19 00:14:0925 unsafe {
26 std::mem::transmute(v)
27 //~^ ERROR cannot transmute
28 }
kadmin648a35e2022-12-29 09:45:1929}
30
31fn overflow(v: [[[u32; 8888888]; 9999999]; 777777777]) -> [[[u32; 9999999]; 777777777]; 8888888] {
Boxyb8eedfa2024-08-19 00:14:0932 unsafe {
33 std::mem::transmute(v)
34 //~^ ERROR cannot transmute
35 }
kadmin648a35e2022-12-29 09:45:1936}
37
Jubilee Young28628f32024-09-19 23:44:3638fn overflow_more(v: [[[u32; 8888888]; 9999999]; 777777777]) -> [[[u32; 9999999]; 777777777]; 239] {
39 unsafe { std::mem::transmute(v) } //~ ERROR cannot transmute between types of different sizes
40}
41
42
Boxyb8eedfa2024-08-19 00:14:0943fn transpose<const W: usize, const H: usize>(v: [[u32; H]; W]) -> [[u32; W]; H] {
44 unsafe {
45 std::mem::transmute(v)
46 //~^ ERROR: cannot transmute between types of different sizes, or dependently-sized types
47 }
Oli Schererd8470bb2024-03-21 10:26:4548}
49
50fn ident<const W: usize, const H: usize>(v: [[u32; H]; W]) -> [[u32; H]; W] {
Boxyb8eedfa2024-08-19 00:14:0951 unsafe { std::mem::transmute(v) }
Oli Schererd8470bb2024-03-21 10:26:4552}
53
54fn flatten<const W: usize, const H: usize>(v: [[u32; H]; W]) -> [u32; W * H] {
Boxyb8eedfa2024-08-19 00:14:0955 unsafe {
56 std::mem::transmute(v)
57 //~^ ERROR: cannot transmute between types of different sizes, or dependently-sized types
58 }
Oli Schererd8470bb2024-03-21 10:26:4559}
60
Boxyb8eedfa2024-08-19 00:14:0961fn coagulate<const W: usize, const H: usize>(v: [u32; H * W]) -> [[u32; W]; H] {
62 unsafe {
63 std::mem::transmute(v)
64 //~^ ERROR: cannot transmute between types of different sizes, or dependently-sized types
65 }
Oli Schererd8470bb2024-03-21 10:26:4566}
67
68fn flatten_3d<const W: usize, const H: usize, const D: usize>(
Boxyb8eedfa2024-08-19 00:14:0969 v: [[[u32; D]; H]; W],
Oli Schererd8470bb2024-03-21 10:26:4570) -> [u32; D * W * H] {
Boxyb8eedfa2024-08-19 00:14:0971 unsafe {
72 std::mem::transmute(v)
73 //~^ ERROR: cannot transmute between types of different sizes, or dependently-sized types
74 }
Oli Schererd8470bb2024-03-21 10:26:4575}
76
77fn flatten_somewhat<const W: usize, const H: usize, const D: usize>(
Boxyb8eedfa2024-08-19 00:14:0978 v: [[[u32; D]; H]; W],
Oli Schererd8470bb2024-03-21 10:26:4579) -> [[u32; D * W]; H] {
Boxyb8eedfa2024-08-19 00:14:0980 unsafe {
81 std::mem::transmute(v)
82 //~^ ERROR: cannot transmute between types of different sizes, or dependently-sized types
83 }
Oli Schererd8470bb2024-03-21 10:26:4584}
85
86fn known_size<const L: usize>(v: [u16; L]) -> [u8; L * 2] {
Boxyb8eedfa2024-08-19 00:14:0987 unsafe {
88 std::mem::transmute(v)
89 //~^ ERROR: cannot transmute between types of different sizes, or dependently-sized types
90 }
Oli Schererd8470bb2024-03-21 10:26:4591}
92
93fn condense_bytes<const L: usize>(v: [u8; L * 2]) -> [u16; L] {
Boxyb8eedfa2024-08-19 00:14:0994 unsafe {
95 std::mem::transmute(v)
96 //~^ ERROR: cannot transmute between types of different sizes, or dependently-sized types
97 }
Oli Schererd8470bb2024-03-21 10:26:4598}
99
Boxyb8eedfa2024-08-19 00:14:09100fn singleton_each<const L: usize>(v: [u8; L]) -> [[u8; 1]; L] {
101 unsafe {
102 std::mem::transmute(v)
103 //~^ ERROR: cannot transmute between types of different sizes, or dependently-sized types
104 }
Oli Schererd8470bb2024-03-21 10:26:45105}
106
107fn transpose_with_const<const W: usize, const H: usize>(
Boxyb8eedfa2024-08-19 00:14:09108 v: [[u32; 2 * H]; W + W],
Oli Schererd8470bb2024-03-21 10:26:45109) -> [[u32; W + W]; 2 * H] {
Boxyb8eedfa2024-08-19 00:14:09110 unsafe {
111 std::mem::transmute(v)
112 //~^ ERROR: cannot transmute between types of different sizes, or dependently-sized types
113 }
Oli Schererd8470bb2024-03-21 10:26:45114}
115
kadmin648a35e2022-12-29 09:45:19116fn main() {}