about summary refs log tree commit diff
path: root/compiler
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2023-06-14 06:25:49 +0200
committerGitHub <noreply@github.com>2023-06-14 06:25:49 +0200
commit269ea4bd6bd8075f60b0ad3d8d51d87dfa18643f (patch)
tree8e16f2e494aff3fc0df7d3f293e2d15d0f54b2b7 /compiler
parent98f6e9644bc008df72eeacbd6d8ba34fcda6422b (diff)
parent3bbc598d16bbaab62ec3f460d1832236908607d8 (diff)
downloadrust-269ea4bd6bd8075f60b0ad3d8d51d87dfa18643f.tar.gz
rust-269ea4bd6bd8075f60b0ad3d8d51d87dfa18643f.zip
Rollup merge of #112520 - chenyukang:yukang-fix-112505, r=fee1-dead
Fix the overflow issue for transmute_generic_consts

Fixes #112505
Diffstat (limited to 'compiler')
-rw-r--r--compiler/rustc_hir_typeck/src/intrinsicck.rs11
1 files changed, 10 insertions, 1 deletions
diff --git a/compiler/rustc_hir_typeck/src/intrinsicck.rs b/compiler/rustc_hir_typeck/src/intrinsicck.rs
index 3c5eafd9484..362c07431e0 100644
--- a/compiler/rustc_hir_typeck/src/intrinsicck.rs
+++ b/compiler/rustc_hir_typeck/src/intrinsicck.rs
@@ -82,8 +82,17 @@ 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 {
+                    // `u128` should definitely be able to hold the size of different architectures
+                    // larger sizes should be reported as error `are too big for the current architecture`
+                    // otherwise we have a bug somewhere
+                    bug!("{:?} overflow for u128", size)
+                }
+            }
             Ok(SizeSkeleton::Generic(size)) => {
                 if let Some(size) = size.try_eval_target_usize(tcx, self.param_env) {
                     format!("{size} bytes")