Fix the overflow issue for transmute_generic_consts
This commit is contained in:
parent
34d64ab7a2
commit
b133841bfc
@ -82,8 +82,14 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
|
||||
// Try to display a sensible error with as much information as possible.
|
||||
let skeleton_string = |ty: Ty<'tcx>, sk| match sk {
|
||||
Ok(SizeSkeleton::Known(size)) => format!("{} bits", size.bits()),
|
||||
Ok(SizeSkeleton::Pointer { tail, .. }) => format!("pointer to `{tail}`"),
|
||||
Ok(SizeSkeleton::Known(size)) => {
|
||||
if let Some(v) = u128::from(size.bytes()).checked_mul(8) {
|
||||
format!("{} bits", v)
|
||||
} else {
|
||||
format!("{} bytes", size.bytes())
|
||||
}
|
||||
}
|
||||
Ok(SizeSkeleton::Generic(size)) => {
|
||||
if let Some(size) = size.try_eval_target_usize(tcx, self.param_env) {
|
||||
format!("{size} bytes")
|
||||
|
7
tests/ui/const-generics/issue-112505-overflow.rs
Normal file
7
tests/ui/const-generics/issue-112505-overflow.rs
Normal file
@ -0,0 +1,7 @@
|
||||
#![feature(transmute_generic_consts)]
|
||||
|
||||
fn overflow(v: [[[u32; 8888888]; 9999999]; 777777777]) -> [[[u32; 9999999]; 777777777]; 239] {
|
||||
unsafe { std::mem::transmute(v) } //~ ERROR cannot transmute between types of different sizes
|
||||
}
|
||||
|
||||
fn main() { }
|
12
tests/ui/const-generics/issue-112505-overflow.stderr
Normal file
12
tests/ui/const-generics/issue-112505-overflow.stderr
Normal file
@ -0,0 +1,12 @@
|
||||
error[E0512]: cannot transmute between types of different sizes, or dependently-sized types
|
||||
--> $DIR/issue-112505-overflow.rs:4:14
|
||||
|
|
||||
LL | unsafe { std::mem::transmute(v) }
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: source type: `[[[u32; 8888888]; 9999999]; 777777777]` (values of the type `[[[u32; 8888888]; 9999999]; 777777777]` are too big for the current architecture)
|
||||
= note: target type: `[[[u32; 9999999]; 777777777]; 239]` (59484438436515561504 bits)
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0512`.
|
Loading…
x
Reference in New Issue
Block a user