diff options
| author | Jubilee <workingjubilee@gmail.com> | 2025-05-30 13:52:26 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-30 13:52:26 -0700 |
| commit | 3846f2f08f19105ecb1f7acc9bd8da70db6f4e1d (patch) | |
| tree | ccead4fb0c34a5c360298834205f66d45c0c22b2 /compiler/rustc_mir_transform/src | |
| parent | a1d70ed5b036e6083af99b6c9cf2abece2a791b0 (diff) | |
| parent | 457f8ba447a2f2d3fc20ad2b0d779d49c9883485 (diff) | |
| download | rust-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.rs | 6 |
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(); |
