about summary refs log tree commit diff
path: root/compiler/rustc_mir_transform/src
diff options
context:
space:
mode:
authorJubilee <workingjubilee@gmail.com>2025-05-30 13:52:26 -0700
committerGitHub <noreply@github.com>2025-05-30 13:52:26 -0700
commit3846f2f08f19105ecb1f7acc9bd8da70db6f4e1d (patch)
treeccead4fb0c34a5c360298834205f66d45c0c22b2 /compiler/rustc_mir_transform/src
parenta1d70ed5b036e6083af99b6c9cf2abece2a791b0 (diff)
parent457f8ba447a2f2d3fc20ad2b0d779d49c9883485 (diff)
downloadrust-3846f2f08f19105ecb1f7acc9bd8da70db6f4e1d.tar.gz
rust-3846f2f08f19105ecb1f7acc9bd8da70db6f4e1d.zip
Rollup merge of #141494 - dianqk:match-br-non-int, r=wesleywiser
mir-opt: Do not transform non-int type in match_branches

Fixes #141378.

r? mir-opt
Diffstat (limited to 'compiler/rustc_mir_transform/src')
-rw-r--r--compiler/rustc_mir_transform/src/match_branches.rs6
1 files changed, 4 insertions, 2 deletions
diff --git a/compiler/rustc_mir_transform/src/match_branches.rs b/compiler/rustc_mir_transform/src/match_branches.rs
index 8c0c3096899..5e511f1a418 100644
--- a/compiler/rustc_mir_transform/src/match_branches.rs
+++ b/compiler/rustc_mir_transform/src/match_branches.rs
@@ -284,12 +284,14 @@ fn can_cast(
     let v = match src_layout.ty.kind() {
         ty::Uint(_) => from_scalar.to_uint(src_layout.size),
         ty::Int(_) => from_scalar.to_int(src_layout.size) as u128,
-        _ => unreachable!("invalid int"),
+        // We can also transform the values of other integer representations (such as char),
+        // although this may not be practical in real-world scenarios.
+        _ => return false,
     };
     let size = match *cast_ty.kind() {
         ty::Int(t) => Integer::from_int_ty(&tcx, t).size(),
         ty::Uint(t) => Integer::from_uint_ty(&tcx, t).size(),
-        _ => unreachable!("invalid int"),
+        _ => return false,
     };
     let v = size.truncate(v);
     let cast_scalar = ScalarInt::try_from_uint(v, size).unwrap();