about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2020-05-21 21:10:47 +0200
committerGitHub <noreply@github.com>2020-05-21 21:10:47 +0200
commit74b5c50214c0edd9582d75fa472ed9a7ea25c0e5 (patch)
tree428909cba33b2925156df7b9236e15f4dc802789
parentfc729d0c60647743306a7cbd1fc4e9a88ccc2fe9 (diff)
parent94aa02855defad20fe63d46a5df9506e82b78ff3 (diff)
downloadrust-74b5c50214c0edd9582d75fa472ed9a7ea25c0e5.tar.gz
rust-74b5c50214c0edd9582d75fa472ed9a7ea25c0e5.zip
Rollup merge of #72425 - RalfJung:discr-sign-ext, r=nikomatsakis
fix discriminant_value sign extension

Fixes a regression introduced in https://github.com/rust-lang/rust/pull/70705
r? @nikomatsakis Cc @lcnr @oli-obk
-rw-r--r--src/librustc_mir/interpret/intrinsics.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/librustc_mir/interpret/intrinsics.rs b/src/librustc_mir/interpret/intrinsics.rs
index 42b969c9991..fc4be82ad90 100644
--- a/src/librustc_mir/interpret/intrinsics.rs
+++ b/src/librustc_mir/interpret/intrinsics.rs
@@ -219,7 +219,10 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
                 let place = self.deref_operand(args[0])?;
                 let discr_val = self.read_discriminant(place.into())?.0;
                 let scalar = match dest.layout.ty.kind {
-                    ty::Int(_) => Scalar::from_int(discr_val as i128, dest.layout.size),
+                    ty::Int(_) => Scalar::from_int(
+                        self.sign_extend(discr_val, dest.layout) as i128,
+                        dest.layout.size,
+                    ),
                     ty::Uint(_) => Scalar::from_uint(discr_val, dest.layout.size),
                     _ => bug!("invalid `discriminant_value` return layout: {:?}", dest.layout),
                 };